實現Nginx代理WSS協議


因為線上H5游戲需要加上SSL,不想在原來的Web 服務器和游戲服務器支持SSL,只希望

在Nginx代理集群支持SSL。整體架構如下:

 

從上圖可以看出需要總共涉及到https/http 和wss/ws 協議的轉換。百度了網上的解決方案,查到一個通過配置tcp模塊的解決方案符合我的想法,但一直不成功。(1. http://stackoverflow.com/questions/12102110/nginx-to-reverse-proxy-websockets-and-enable-ssl-wss; 2. http://www.iyunv.com/thread-41753-1-1.html)。不知道是我這nginx版本(nginx版本:1.8 + nginx_tcp_proxy_module)的原因,還是tcp模塊不支持ssl等其它原因。

一直不能建立連接,報WebSocket opening handshake was canceled 錯誤。如圖:

 

 

后來看到了官網的教程(http://nginx.org/en/docs/http/websocket.htm, 譯文:http://blog.csdn.net/chszs/article/details/26369257)可以通http模塊實現wss代理,並且之前https代理已經實現,所以決定嘗試下,結果確實OK。在nginx的http模塊下增加以下配置即可,直接利用443端口轉發:

 

 

主要還是發現WebSocket協議和HTTP協議雖然不同,但是WebSocket協議的握手和HTTP是兼容的,它使用HTTP的Upgrade協議頭將連接從HTTP連接升級到WebSocket連接。這個特性使得WebSocket應用程序可以很容易地應用到現有的基礎設施。例如,WebSocket應用可以使用標准的80和443 HTTP端口,因此可以通過現有的防火牆設施。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM