2012-04-26 86 views
25

我想用nginx proxy_pass模塊替換我的node-http-proxy模塊。就像我讀過的那樣,是否有可能使用新發布的nginx版本,它支持HTTP/1.1開箱即用。我看到一些線程正在困擾着這個問題,nginx不支持websocket。nginx 1.2.0 - socket.io - HTTP/1.1 - 代理websocket連接

在我運行在後臺的幾個節點項目的案例IM和希望的路線從80端口我WebSocket連接至8000-8100,視域。是否有一種本地方式來做websocket代理/反向代理而不使用tcp_module插件?

我試圖建立與proxy_passing它nginx.conf上游,但如果我嘗試通過網頁套接字連接到端口80,我得到一個502網關錯誤。

任何人都面臨同樣的問題? 有沒有人有一個工作的例子nginx + spcket.io,通過端口80代理?

+0

使用該插件是本地方式。 – Dayo 2012-04-28 23:07:23

+0

是的,這是可能的。爲了排除故障,如果你包含你的nginx.conf文件,這將會很有幫助。 – nil 2012-05-06 13:25:41

回答

34

不,這還不可能; nginx 1.2整合了來自1.1.x開發分支的東西,它確實包含了HTTP/1.1反向代理。 Websocket連接是使用HTTP/1.1「Upgrade」標頭建立的,但nginx現在支持這種標頭的事實並不意味着它支持websockets(websockets是一種不同的協議,而不是HTTP)。 (我自己使用1.1.x分支(我發現它對我的目的來說足夠穩定),並且在沒有tcp_module的情況下它不工作)

Websockets可能會在1.3.x(http://trac.nginx.org/nginx/roadmap) 。

你的選擇是:

  • 繼續使用節點HTTP代理
  • 使用nginx的無TCP模塊; socket.io不會使用WebSockets但別的東西(如長輪詢)
  • nginx的與TCP模塊:在這種情況下,我認爲你需要一個額外的端口,這個模塊(從未嘗試過這個自己)
  • 把別的東西作爲反向代理的前端:我在nginx和node前面使用HAProxy(它支持websockets)。現在Nginx只是作爲一個靜態文件服務器,而不是代理。清漆是另一種選擇,如果你想額外的緩存。
+0

Thx澄清Matthias。對我來說,如果nginx自帶HTTP1/1,那麼nginx支持websocket代理是很自然的。我知道它不是HTTP協議,但我仍然需要做一些功課:) – ayk 2012-05-10 05:45:57

+0

在撰寫本文時,Nginx 1.3已經發布並支持websockets。這是一個非常簡單的配置,我[博客上講述](http://metacogni.tv/blog/2013/02/19/websockets-with-nginx-plus-ssl-also/) 希望有所幫助。 – Octaflop 2013-02-20 00:33:18

0

關於nginx的與TCP模塊有我所遇到的一些問題。 但最棘手的是試圖在EC2實例的端口80上使用nginx運行websocket。

我描述了整個配置here