Конфигурация 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:
Установите для proxy_connect_timeout меньшее значение:
proxy_connect_timeout 2s;