Nginx, Node.JS and socket.io 504 timeout
Maxim Dounin
mdounin at mdounin.ru
Tue Oct 1 15:45:41 UTC 2013
Hello!
On Tue, Oct 01, 2013 at 11:22:14AM -0400, Kirill wrote:
> Здравствуйте!
>
> Nginx config
>
> 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 я ожидаю какое-то
> время(read_timeout) и потом получаю 504 ошибку.
>
> Мне надо сделать так, чтобы если node,js выключен и клиент обращается к
> адресу http://live.domain.com/socket.io/socket.io.js , то ему СРАЗУ же
> выдается либо 404, либо 502 (что должно быть логично)
> Иначе я не понимаю как быть если node.js отвалился, а у пользователя не
> грузится страница из-за того, что js по указанному пути ожидает таймаута.
Если на соответствующем порту никто не слушает - nginx должен
получить RST в ответ на попытку соединения. Судя по описанию
проблемы - у вас этого почему-то не происходит. Ищите в системе -
скорее всего срабатывают какие-то ограничения/лимиты.
E.g. на FreeBSD за соответствующее место отвечает
net.inet.icmp.icmplim.
--
Maxim Dounin
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru