Nginx 代理 WSS 协议
2017-11-20 21:17 浏览(733

好久没写博客了,最近在用swoole写本博客的一个聊天室,断断续续用了几周时间写好(主要还是太懒)。本地测试都还ok,今天上线,发现博客是用https的,ws 协议不被允许执行,唉

正好web服务器用的 Nginx,就想到了用 Nginx 代理一下,而且 博客域名也有证书,写一段代理就ok了。

因为ws(Websocket)是基于HTTP协议的,所以也可用标准的 80和443 端口。无非就是多了这两个东东

Upgrade: websocket
Connection: Upgrade

所以,在代理的时候就要显示的加上这两个值

upstream wss_server_pool{
    server 127.0.0.1:9501;
}
server{
    listen 443 http2;
    server_name blog.jam00.com;
	
    ssl on;
    ssl_certificate   cert/214299590960949.pem;
    ssl_certificate_key  cert/214299590960949.key;
    ssl_session_timeout 30m;
    ssl_session_cache shared:SSL:10m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    #...

    #代理wss
    location /wss/ {
        proxy_pass http://wss_server_pool;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    #...
}

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

这两个就是重点啦,至于如何配置 https 请看 https://blog.jam00.com/article/info/11.html


这里用到了 Nginx 的upstream模块,可以设置多个后端ws服务,做负载均衡什么的


我的socket程序就是监听的 9501 端口


那么相应的,我的 wss 链接就为 wss://blog.jam00.com/wss/?token=77f01d39f0fec4ee909ac3968285cd0d

问号后面的不就不用管了,自定义的参数

完美


本博客的聊天室功能今天上线并已开启,只能登录帐号才可体验哦。

群聊界面

在线用户界面

评论(0)
发布评论
回复X
聊天室(0