Gateway之WSS协议的Nginx+openssl的解决方案(生产环境配置分享)

yinjun

自己在第一次使用过程中,搜索了N久,发现网上的资料不是很详细,现在自己已经搞定后,特把细节贴出来分享一下。

本人的生产环境: Centos6X + php56X + Nginx1.10 + openSSL

首先 Nginx的版本要高,尽量用当前最新稳定版本。

其次 WSS协议,是在HTTPS协议的基础上,进行协议升级,进行通讯的,所以先要保证你有一个
HTTPS正常的WEB站点。

所以,通过Nginx -V 请保证 一定有 --with-http_ssl_module --with-stream --with-stream_ssl_module 这三个模块。

好了,关键点:nginx.conf 配置修改

在 http{} 节点中,增加以下配置:

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

   upstream websocket {
        ip_hash;            
       server 10.1.2.12:8282;#换成具体的服务器对应的IP与端口
       #server  10.1.2.11:8282#换成具体的服务器对应的IP与端口 如果只有一台可以去掉这一行方便以后扩展
   }

在具体的 监听有 443 ssl 的server{}节点中,增加以下配置 或者单独增加一个443 的Server{}节点也行

      location /socket.io {
       proxy_pass http ://websocket;#前面的upstream websocket对应    复制后请把http后面的空格去掉
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
        proxy_read_timeout 60s;#默认为60s 
        proxy_send_timeout 60s;#默认为60s
       break;
       }

假设当前域名为 https ://www.abc.com 则配置好后的wss地址为 wss://www.abc.com/socket.io

另外,如果是ajax请求wss,可能会有跨域问题,解决方案就是:
在配置有wss的Server{}节点中增加以下内容:

add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Headers' 'X-Requested-With';
add_header 'Access-Control-Allow-Methods' 'GET,POST';

配置OK后,重启nginx 即可测试。

4152 4 1
4个回答

walkor

非常感谢分享,今天正好两个群里人都在问 wss怎么配置。
希望越来越多的人把自己的使用心得发出来(问答、个人blog、各个社区都可以 ),方便更多的人。

  • 暂无评论
颗粒Cc.

已收藏~~~

  • 暂无评论
玩转曳步

感谢分享,还有有个问题想问,现在服务器开了多个wm,多个端口,如果我的客户端明确指定想要访问那个wm的端口该怎么办

  • hmmm 2016-10-26

    没明白问题所在,客户端要访问那个端口就直接访问好了啊

hmmm

刚好要用,感激涕零

  • 暂无评论
年代过于久远,无法发表回答
🔝