因為線上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端口,因此可以通過現有的防火牆設施。
