需求: 小程序连接websocket,必须使用wss协议
nginx配置websocket以及wss协议
其实wss协议就是使用了ssl协议的域名所自带的协议,所以wss协议需要域名来进行socket连接,并且开通ssl证书访问即可。
首先部署项目:
项目的websocket接口在内部为: localhost:28888
也就是本地通过 ws://localhost:28888 进行socket连接,当然因为使用域名wss,所以此处需要放到服务器 ws://你的服务器ip:28888 (这样访问的前提是将28888加入开放端口)

首先设置新二级域名的dns解析
并且开通ssl证书
下载ssl证书(此处使用腾讯云,里面有nginx部署ssl证书教程)
上传ssl证书到服务器,并将证书部署到对应的二级域名
nginx配置websocket

map $http_upgrade $conn_upgrade {
      default upgrade;
      '' close;
    }
        
    server {
      listen 80;
      listen 443 ssl;
      server_name www.aaa.com; # 按实际域名添加
      
      # 证书地址(根据喜好选择文件夹)
      ssl_certificate /www/wwwcertificate/xxx.crt; # 按实际文件名填
      # 证书key地址
      ssl_certificate_key /www/wwwcertificate/xxx.key;
      ssl_session_timeout 5m;
      ssl_protocols TLSv1.2 TLSv1.3;
      #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
        ssl_prefer_server_ciphers on;
        
        location /ws {
           #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
           #例如,您的网站运行目录在/etc/www下,则填写/etc/www。
            proxy_pass http://localhost:28888;  # 本地服务的ws连接端口
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connetion $conn_upgrade;
        }

    }

主要涉及到ws的配置是

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connetion $conn_upgrade;

这两行配置的意思是将http协议升级为ws协议。变量值为前面定义的map

这样跳转会有个有意思的地方,那就是在服务端获取localhost:28888后面的参数时,会将上级代理的参数也获取到
比如:使用 www.aaa.com/ws连接ws,那么会获取到uri为/ws。这里明明是:

  location /ws {
            proxy_pass http://localhost:28888;
            # ...
            }

按道理应该是 www.aaa.com/ws对应是localhost:28888/ws,uri才是/ws,
此处也就是说,最终获取的其实是连接域名的uri,而不管是否经过代理

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐