自己在第一次使用過程中,搜索了N久,發(fā)現(xiàn)網(wǎng)上的資料不是很詳細(xì),現(xiàn)在自己已經(jīng)搞定后,特把細(xì)節(jié)貼出來分享一下。
本人的生產(chǎn)環(huán)境: Centos6X + php56X + Nginx1.10 + openSSL
首先 Nginx的版本要高,盡量用當(dāng)前最新穩(wěn)定版本。
其次 WSS協(xié)議,是在HTTPS協(xié)議的基礎(chǔ)上,進(jìn)行協(xié)議升級,進(jìn)行通訊的,所以先要保證你有一個
HTTPS正常的WEB站點。
所以,通過Nginx -V 請保證 一定有 --with-http_ssl_module --with-stream --with-stream_ssl_module 這三個模塊。
好了,關(guān)鍵點:nginx.conf 配置修改
在 http{} 節(jié)點中,增加以下配置:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
ip_hash;
server 10.1.2.12:8282;#換成具體的服務(wù)器對應(yīng)的IP與端口
#server 10.1.2.11:8282#換成具體的服務(wù)器對應(yīng)的IP與端口 如果只有一臺可以去掉這一行方便以后擴(kuò)展
}
在具體的 監(jiān)聽有 443 ssl 的server{}節(jié)點中,增加以下配置 或者單獨增加一個443 的Server{}節(jié)點也行
location /socket.io {
proxy_pass http ://websocket;#前面的upstream websocket對應(yīng) 復(fù)制后請把http后面的空格去掉
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 60s;#默認(rèn)為60s
proxy_send_timeout 60s;#默認(rèn)為60s
break;
}
假設(shè)當(dāng)前域名為 https ://www.abc.com 則配置好后的wss地址為 wss://www.abc.com/socket.io
另外,如果是ajax請求wss,可能會有跨域問題,解決方案就是:
在配置有wss的Server{}節(jié)點中增加以下內(nèi)容:
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 即可測試。