首页 > 解决方案 > 无法连接到 socket.io 服务器

问题描述

我已将 NGINX 设置为将到 example.com 的请求路由到端口 3000 上的 nodejs 服务器,该服务器为前端提供服务,并将 example.com/api 路由到端口 3001 上的 nodejs api 服务器。

我尝试连接到端口 3001 上的套接字,例如:

const socket = openSocket('example.com/api');

但我在控制台中收到错误:

polling-xhr.js:265 POST https://example.com/socket.io/? 
EIO=3&transport=polling&t=MWPLGiL 404 (Not Found)

看起来 socket.io 仍在尝试仅连接到 example.com。知道为什么 /api 被忽略了吗?我需要这个去example.com/api,因为该服务器配置为处理套接字连接。如果有人可以帮助我,将不胜感激。谢谢!

标签: nginxsocket.ionginx-reverse-proxy

解决方案


我通过在 NGINX 配置中添加以下内容解决了这个问题:

 location ~ ^/(api|socket\.io) {
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://localhost:3001;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 900s;
}

很抱歉在没有深入挖掘的情况下提出这个问题。希望这对其他人有帮助。


推荐阅读