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