nginx 配置 wss 协议

原理说明

其实 wss 认证和 https 认证没什么区别,只是需要单独添加两个格外的 header ,支持一下 ws 协议升级而已,所以直接copy 一个 https 模版进行简单的变更即可

链接简历过程

ws 建立连接过程

  • 前端向后段发送标准的http连接请求,并携带升级协议相关参数,同时设置一个安全密钥
    • Connection: Upgrade:表示要升级协议
    • Upgrade: websocket:表示要升级到websocket协议。
    • Sec-WebSocket-Version: 13:表示websocket的版本。如果服务端不支持该版本,需要返回一个Sec-WebSocket-Versionheader,里面包含服务端支持的版本号。
    • Sec-WebSocket-Key:与后面服务端响应首部的Sec-WebSocket-Accept是配套的,提供基本的防护,比如恶意的连接,或者无意的连接。
  • 后段回复协议同意升级,并回复相关信息内容
    • Connection:Upgrade
    • Upgrade: websocket
    • Sec-WebSocket-Accept: byzN0AQ13jhfONC1bP8dTKb4PTU=

注意事项

  • xxxxxx.net 换成自己的域名
  • pem和key不要过期,注意路径要正确

nginx 配置 wss 协议的配置文件如下

#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    listen 443 ssl;

    #填写证书绑定的域名
    server_name xxxxxx.net;
   
    #填写证书文件名称
    ssl_certificate /opt/pki/xxxxxx.net.pem;
    #填写证书私钥文件名称  
    ssl_certificate_key /opt/pki/xxxxxx.net.key;

    ssl_session_timeout 5m;
    #表示使用的加密套件的类型
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

    ssl_prefer_server_ciphers on;
    access_log  logs/xxxxxx.net.access.log  main;
    	        
     location /ws {
        proxy_pass http://localhost:31697;
	    proxy_read_timeout              500;
	    proxy_set_header                Host    $http_host;
	    proxy_set_header                X-Real-IP          $remote_addr;
	    proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
	    proxy_http_version 1.1;
    	
    	# ws 协议专用头
     	proxy_set_header                Upgrade $http_upgrade;
    	proxy_set_header                Connection "Upgrade";
    }
}

你可能感兴趣的:(nginx,websocket,运维)