繁体   English   中英

Nginx上的Socket.io 404

[英]Socket.io 404 on nginx

因此,我一直在浏览许多帖子,网站,但仍未解决此问题。

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

请注意,上面的代码是我在阅读了有关serverfault的许多问题以及博客文章的多个地方后得到的。

我不记得在我使用的第一个位置上为socket.io使用第二个位置“标记”(这叫它吗?)。

为您的Nginx提供服务器名称localhost ,然后尝试将proxy_pass传递给localhost可能对您没有任何帮助。

尝试摆脱server_name localhost; 完全改变所有这些:

proxy_pass http://localhost:xxxx;

对此:

proxy_pass http://127.0.0.1:xxxx;

或者,如果您想正确执行此操作,则在服务器块之外创建一个上游指令:

upstream socketserver { server 127.0.0.1:3000; }

并将您的proxy_pass指令更改为:

proxy_pass http://socketserver/;

代理通行证应为:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM