首页 > 解决方案 > nginx 上的 Socket.io 404

问题描述

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

我以前在我的服务器上运行了一个项目,包括 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;
    }
}

我的 socket.io 服务器:

const app = express();
const server = http.createServer(app);
const io = require('socket.io')(server);
server.listen(3000);

客户(哈巴狗):

script(src="/socket.io/socket.io.js")

请注意,上面的代码是我在阅读了关于这里、服务器故障以及几个地方的博客文章的很多问题后得出的结果。

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

标签: node.jsnginxsocket.io

解决方案


代理通行证应该是:

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

有关详细信息,请参阅https: //medium.com/@ibraheemabukaff/how-to-proxy-websockets-with-nginx-e333a5f0c0bb...


推荐阅读