nginx node.js和socket.io 504超时

nginx node.js和socket.io 504超时

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 也可能存在问题:

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

相关内容