Назад | Перейти на главную страницу

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 на стороне клиента.

Гибким решением было бы использовать 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;
    }
}

Таким образом, вы можете дополнительно контролировать количество допускаемых отказов и иметь несколько серверов в одном восходящем потоке.

Пожалуйста, посмотрите мой ответ здесь, также может быть проблема с csf, если вы используете Linux:

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

Установите для proxy_connect_timeout меньшее значение:

proxy_connect_timeout 2s;