2012-09-28 66 views
1

我正在開發Django Web服務。我試圖利用WebSocket(ws://)推PUSH。到目前爲止,nGINX還不支持ws。所以我使用Tornado Server來託管WebSocket。很多(幾乎所有)教程都有使用Socket.io的解決方案。我不想使用Socket.io因爲它不是純WebSocket(按照我)。我只想使用ws而不是Socket.io(Node.js)。如何從nGINX到WebSocket服務器(Tornado)的proxy_pass

那麼,我的前端服務器應該是nGINX服務HTTP請求。 WS://請求應傳遞到龍捲風服務器(或者,如果支持的任何其他服務器)

回答

0

在寫Nginx的不支持WebSockets的時間 - 現在1.3.13(2月2013年)

支持

問題是nginx不支持websockets,因爲它終止並代理數據到下游服務。您需要將HAProxy放在您的nginx服務器前面,以便按照您的要求路由流量。

很好的例子在這裏 - HAProxy + WebSocket Disconnection - 雖然他們在談論nodejs作爲後端服務,但一切都基本相同。

1

這裏是NGINX配置片段

map $http_upgrade $connection_upgrade { 
    default upgrade; 
    '' close; 
} 

upstream websocket { 
    server 192.168.100.10:8010; 
} 

server { 
    listen 8020; 
    location/{ 
     proxy_pass http://websocket; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection $connection_upgrade; 
    } 
} 

更多細節可以在他們的博客https://www.nginx.com/blog/websocket-nginx/

找到