Node.js nginx上的Socket.io 404

Node.js nginx上的Socket.io 404,node.js,nginx,socket.io,Node.js,Nginx,Socket.io,所以我已经浏览了很多帖子和网站,但仍然没有解决这个问题 我以前有一个项目在我的服务器上运行,包括socket.io,没有问题 但是现在我将这个新项目上传到服务器上,socket.io似乎总是返回404 对不起,如果我忽略了一些显而易见的事情 Nginx配置: server { listen 80 default_server; listen [::]:80 default_server; index index.html index.htm index.nginx-de

所以我已经浏览了很多帖子和网站,但仍然没有解决这个问题

我以前有一个项目在我的服务器上运行,包括socket.io,没有问题

但是现在我将这个新项目上传到服务器上,socket.io似乎总是返回404

对不起,如果我忽略了一些显而易见的事情

Nginx配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    index index.html index.htm index.nginx-debian.html;

    server_name localhost;

    location / {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location /demo/ {
        proxy_pass http://localhost:3000/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }

    location /socket.io/ {
        proxy_pass http://localhost:3000/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass_request_headers on;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}
My socket.io服务器:

const app = express();
const server = http.createServer(app);
const io = require('socket.io')(server);
server.listen(3000);
客户(帕格):

请注意,上面的代码是我在阅读了很多关于here、serverfault的问题以及一些地方的博客文章后得出的结论


我不记得在我使用的第一个socket.io中使用了第二个位置“tag”(就是它的名字吗?)。

给你的Nginx一个服务器名
localhost
,然后尝试
proxy\u pass
给localhost可能对你没有任何好处

尝试摆脱
服务器名称localhost并更改所有这些:

proxy\u passhttp://localhost:xxxx;

为此:

proxy\u passhttp://127.0.0.1:xxxx;

或者,如果要正确执行,请在服务器块外创建上游指令:

上游socketserver{
服务器127.0.0.1:3000;
}

并将您的
proxy\u pass
指令更改为:


proxy\u passhttp://socketserver/;

代理通行证应为:

location /socket.io/ {
  proxy_pass http://localhost:3000/socket.io/;
  ... 
}

有关详细信息,请参见…

您好,谢谢您的回答。不幸的是,它不起作用,我在尝试加载socket.io时仍然得到404。在另一个站点加载,但保持这种配置实际上是可行的,所以我很有信心这是我的socket.io设置中的一个错误,但这似乎也是一样的。是这个文件返回404,还是任何到套接字服务器的连接
script(src=“/socket.io/socket.io.js”)
似乎是每个连接,文件本身不返回404,是否对此有任何更新?
location /socket.io/ {
  proxy_pass http://localhost:3000/socket.io/;
  ... 
}