nginx node.js&socket.io 504超时

Nginxconfiguration

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。

灵活的解决scheme是使用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; } } 

这样,您可以另外控制可容忍的故障数量,并且您可以在一个上游有多个服务器。

将proxy_connect_timeout设置为较低的值:

 proxy_connect_timeout 2s; 

请看我在这里的答案,如果你在Linux上也可能有一个问题,

https://serverfault.com/a/713874/150138