Выдержка из документации:
Синтаксис: | fastcgi_connect_timeout |
---|---|
Умолчание: | fastcgi_connect_timeout 60s; |
Контекст: | http , server , location |
Задаёт таймаут для установления соединения с FastCGI-сервером. Необходимо иметь в виду, что этот таймаут обычно не может превышать 75 секунд.
Возникает вопрос, откуда это ограничение и есть ли возможность поставить больше, чем 75 секунд. В рассылке по nginx был найден исчерпывающий ответ. Приведу ответ цитатой:
nginx изначально разрабатывался под FreeBSD, на ней (цитата из tcp(4)):
: Timeout, in milliseconds, for new, non-established TCP connections.
: The default is 75000 msec.
Если копнуть глубже, то на Linux системах он намного меньше (порядка 20 секунд). То есть, значение fastcgi_connect_timeout на Linux’e должно быть не больше 20, иначе оно будет игнорироваться и будет использовать ядерные значения для timeout’a. Иными словами, вы не можете поставить больше, чем выставлено системой. Выходит, что бы повлиять это, нужно изменить значения timeout’a. Приступим
FreeBSD/OpenBSD
# sysctl net.inet.tcp.keepinit=180000
Solaris
# ipadm set-prop -p _keepalive_interval=1800000 tcp
Linux
# sysctl net.ipv4.tcp_syn_retries = 8
Для Linux систем есть небольшая оговорка: дело в том, что это количество попыток, а не время в секундах. Экспериментальным путём было установлено, что значение 6 соответствует 45 секундам, 7 – 90, 8 – 190. Подробнее об этом, можно прочесть здесь