在socket.io应用程序的haproxy前面使用nginx

在socket.io应用程序的haproxy前面使用nginx,nginx,websocket,proxy,haproxy,Nginx,Websocket,Proxy,Haproxy,以下是我的应用程序代理流程: nginx(主机a:80)->haproxy(主机b:5000)->socket.io应用程序(主机c:3000) 我可以通过haproxy(主机b:5000)访问该应用程序,它工作正常,http可以升级到socket connect 但是,当我通过nginx(host-a:80)访问时,它失败了 当我如下配置nginx时,http可以升级到socket连接,但出现503错误,请求似乎无法正确地落入socket.io应用程序 当我如下配置nginx时,我可以从

以下是我的应用程序代理流程:

nginx(主机a:80)->haproxy(主机b:5000)->socket.io应用程序(主机c:3000)

我可以通过haproxy(主机b:5000)访问该应用程序,它工作正常,http可以升级到socket connect

但是,当我通过nginx(host-a:80)访问时,它失败了

  • 当我如下配置nginx时,http可以升级到socket连接,但出现503错误,请求似乎无法正确地落入socket.io应用程序
  • 当我如下配置nginx时,我可以从应用程序获取数据,但连接无法升级到websocket,socket.io降级到轮询模式

是否可以在这样的套接字代理服务器前运行nginx?

哪个组件实际生成503错误?HAProxy是否记录请求?如果是这样,它会显示什么错误代码,记录的错误代码会告诉您什么?这是HAProxy在成功请求时记录为
---
的值。如果HAProxy对刚刚发生的事情不满意,那么前两个
-
将更改为不同的代码。@Michael sqlbot非常感谢您的提示。503错误发生在Haproxy中。最后,我们发现这是因为我在haproxy中设置了错误的服务器名称,导致请求无法找到正确的应用程序。问题不在代理配置中。我很高兴您找到了它。我投票决定解决这个问题,因为这个问题不能再被复制/简单的印刷错误。


    location /socket.io {
        proxy_pass         http://node_server_pool;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }



    location /socket.io {
        proxy_pass         http://node_server_pool;
        proxy_set_header   X-Real-IP            $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host                   $http_host;
        proxy_set_header   X-NginX-Proxy    true;
        proxy_set_header   Connection "";
        proxy_http_version 1.1;
        proxy_redirect off;
    }