天天看點

Nginx學習之反向代理WebSocket配置執行個體

去年,做過一款競賽打分的app。具體需求,同組教師之間可以互相通信,及時通知同組人員,其他組員做了那些操作(當然,這隻是針對特定操作)。

采用目前比較成熟的websocket技術,websocket協定為建立用戶端和伺服器端需要實時雙向通訊的webapp提供了一個選擇。其為html5的一部分,websocket相較于原來開發這類app的方法來說,其能使開發更加地簡單。大部分現在的浏覽器都支援websocket,比如firefox,ie,chrome,safari,opera,并且越來越多的伺服器架構現在也同樣支援websocket。

在實際的生産環境中,要求多個websocket伺服器必須具有高性能和高可用,那麼websocket協定就需要一個負載均衡層,nginx從1.3開始支援websocket,其可以作為一個反向代理和為websocket程式做負載均衡。

注:看官方文檔說 nginx 在 1.3 以後的版本才支援 websocket 反向代理,是以要想使用支援 websocket 的功能,必須更新到 1.3 以後的版本

nginx通過允許一個在用戶端和後端伺服器之間建立的隧道來支援websocket。為了nginx發送來至于用戶端upgrade請求到後端伺服器,upgrade和connection頭部必須被設定明确。

代碼執行個體:

前端配置:

最後,重新開機下nginx即可。

反向代理伺服器在支援websocket時面臨的挑戰

websocket是端對端的,是以當一個代理伺服器從用戶端攔截一個upgrade請求,它需要去發送它自己的upgrade請求到後端伺服器,也包括合适的頭。

因為websocket是一個長連接配接,不像http那樣是典型的短連接配接,是以反向代理伺服器需要允許連接配接保持着打開,而不是在它們看起來空閑時就将它們關閉。

繼續閱讀