因此,我一直在浏览很多帖子,网站,但仍未解决此问题。
我以前在服务器上运行了一个项目,包括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时使用第二个位置“标记”(这就是它的名字吗?)。
答案 0 :(得分:0)
为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/;
答案 1 :(得分:0)
代理通行证应为:
location /socket.io/ {
proxy_pass http://localhost:3000/socket.io/;
...
}
有关详细信息,请参见https://medium.com/@ibraheemabukaff/how-to-proxy-websockets-with-nginx-e333a5f0c0bb ...