![nginx node.js和socket.io 504超时](https://linux22.com/image/618805/nginx%20node.js%E5%92%8Csocket.io%20504%E8%B6%85%E6%97%B6.png)
Nginx 配置
server {
listen *:80;
server_name live.domain.com;
server_tokens off;
charset utf-8;
error_log /var/log/nginx/live-error.log info;
access_log /var/log/nginx/live-access.log;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:1337;
proxy_redirect off;
}
}
当 node.js 工作时,一切都正常,但如果 node.js 没有启动,我尝试加载页面http://live.domain.com/socket.io/socket.io.js它让我等待30秒(read_timeout)。
我想要这样做,如果 node.js没有运行我立即收到 404 或 502 错误,而没有等待 30 秒超时。
换句话说:我需要立即在客户端检查node.js。
答案1
一个灵活的解决方案是使用upstream
:
upstream backend {
server 127.0.0.1:1337 max_fails=1 fail_timeout=5s;
}
server {
listen *:80;
server_name live.domain.com;
server_tokens off;
charset utf-8;
error_log /var/log/nginx/live-error.log info;
access_log /var/log/nginx/live-access.log;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://backend;
proxy_redirect off;
}
}
通过这种方式,您还可以控制可以容忍的故障数量,并且可以在一个上游拥有多个服务器。
答案2
将 proxy_connect_timeout 设置为较低的值:
proxy_connect_timeout 2s;
答案3
请在此处查看我的回答,如果您使用的是 Linux,则 csf 也可能存在问题: