眾所周知,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的長(zhǎng)鏈接技術(shù)兑凿,由于這個(gè)技術(shù)的出現(xiàn)凯力,保證了客戶端可以被動(dòng)的接收來自服務(wù)器的消息。
考慮到數(shù)據(jù)安全問題礼华,現(xiàn)在越來越多的網(wǎng)站開始使用https協(xié)議咐鹤,一種將數(shù)據(jù)通過ssl加密后傳輸?shù)囊环N技術(shù)。websocket協(xié)議也有其對(duì)應(yīng)的ssl加密技術(shù)圣絮,其協(xié)議標(biāo)識(shí)為wss(普通的為ws)祈惶。但是由于ws與https這兩個(gè)協(xié)議配置都需要服務(wù)器的支持。由于我以前一直在使用nginx扮匠,對(duì)于在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í)令哟,就會(huì)在服務(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