使用nginx解決一臺服務(wù)器中ws協(xié)議與wss協(xié)議共存問題

眾所周知,nginx是一個(gè)高性能的web靜態(tài)服務(wù)器,同時(shí)具有很強(qiáng)大的反向代理以及fastcgi功能,因此現(xiàn)在在web端最常用的配置方式就是ngixn處理靜態(tài)元素,然后使用apache+php模塊,tomcat,php-fpm等工具處理動(dòng)態(tài)代碼。

通常apache+php模塊,tomcat直接使用反向代理的方式,而php-fpm則使用fastcgi的通信方式。但是在web通信中,還有一種使用非常流行的通信方式,那就是websocket通信,他是基于web的長鏈接技術(shù),由于這個(gè)技術(shù)的出現(xiàn),保證了客戶端可以被動(dòng)的接收來自服務(wù)器的消息。

考慮到數(shù)據(jù)安全問題,現(xiàn)在越來越多的網(wǎng)站開始使用https協(xié)議,一種將數(shù)據(jù)通過ssl加密后傳輸?shù)囊环N技術(shù)。websocket協(xié)議也有其對應(yīng)的ssl加密技術(shù),其協(xié)議標(biāo)識為wss(普通的為ws)。但是由于ws與https這兩個(gè)協(xié)議配置都需要服務(wù)器的支持。由于我以前一直在使用nginx,對于在nginx下配置ssl非常熟練,但是這次的案子需要我配置wss協(xié)議。一下子我人都傻了。

下面來說說我是這么解決給wss協(xié)議配置ssl的吧。

其實(shí)說起來也沒什么,而且還有點(diǎn)卑鄙,由于我一開始想直接在websocket服務(wù)器軟件上配置ssl,但是通過實(shí)驗(yàn)得知,websocket服務(wù)器配置了wss,就不具備ws功能了,而目前我的另一個(gè)案子又需要使用不加密的ws通信方式,所以直接在websocket下配置的方式?jīng)]有走通,后來我想到以前有通過nginx配置https協(xié)議,反向代理apache的http協(xié)議,因此我想,是否可以通過配置nginx,反向代理wss協(xié)議到ws上去呢?按照這個(gè)思路我查詢了相關(guān)資料,最后居然被我給找到方法來了。

server?{

listen?15301;

listen?[::]:15301;

server_name?www.worldflying.cn;

ssl?on;

ssl_certificate?/var/www/worldflying/www.worldflying.cn.pem;

ssl_certificate_key?/var/www/worldflying/www.worldflying.cn.key;

location?/?{

proxy_pass?http://127.0.0.1:15300;

proxy_http_version?1.1;

proxy_set_header?Upgrade?$http_upgrade;

proxy_set_header?Connection?"upgrade";

}

}

上面的配置就是我之前的那個(gè)案子的配置,意思是wss協(xié)議的端口是15301,ws協(xié)議的端口是15300,當(dāng)有客戶通過正確的域名與15301這個(gè)端口來連接wss協(xié)議時(shí),就會在服務(wù)器內(nèi)部反向代理到15300這個(gè)普通的ws端口去,由于在服務(wù)器內(nèi)部反向代理,自然也就不存在安全問題。這樣我就成功的實(shí)現(xiàn)了websocket服務(wù)器中,ws協(xié)議與wss協(xié)議共存的問題了。


文章來源:武漢app開發(fā) http://www.worldflying.cn/article-id-13.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容