1

我正在开发 Django Web 服务。我正在尝试使用 WebSocket (ws://) 来使用 PUSH。到目前为止,nGINX 中不支持 ws。所以我使用 Tornado Server 来托管 WebSocket。许多(几乎所有)教程都有使用 Socket.io 的解决方案。我不想使用 Socket.io 因为它不是纯 WebSocket(根据我)。我只想使用 ws 而不是 Socket.io (Node.js)。

好吧,我的前端服务器应该是 nGINX 来服务 HTTP 请求。ws:// 请求应该被传递到 Tornado 服务器(或任何其他服务器,如果支持)

4

2 回答 2

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/中找到

于 2015-12-15T04:17:10.047 回答
0

在撰写本文时,Nginx 不支持 websockets - 现在在 1.3.13 中支持(2013 年 2 月)

问题是 nginx 不支持 websockets,因为它终止并将数据代理到下游服务。您需要将 HAProxy 放在您的 nginx 服务器前面,以按照您想要的方式路由流量。

这里有一个很好的例子——HAProxy + WebSocket Disconnection——虽然他们在谈论 nodejs 作为后端服务,但本质上一切都是一样的。

于 2012-09-28T15:48:29.700 回答