Все, что вам нужно знать о таймаутах NGINX
10:15, 23.05.2024
NGINX - это популярный многоцелевой сервер, который связывает части внешней/внутренней сети, а также предоставляет доступ к динамическим данным и файлам. В этой статье мы поговорим именно о тайм-аутах NGINX и о том, как правильно работать с ними, отключая и устанавливая различные тайм-ауты. Таймауты очень важны, если говорить об аспекте конфигурации, поскольку они определяют период, в течение которого сервер ожидает определенного события перед его завершением. Они очень важны и влияют на стабильность работы серверов, а также на предотвращение исчерпания ресурсов. Итак, если эта тема показалась вам интересной, то мы поделимся с вами всеми практическими рекомендациями, касающимися таймаутов.
Основы таймаутов NGINX
Вот несколько основных принципов работы таймаутов NGINX:
- send_timeout - связан с максимальным временем отправки ответа клиенту (согласно настройкам по умолчанию, оно составляет 60). Это очень важно для устранения задержек с ответом и управления медленными клиентами.
- client_body_timeout - этот таймаут характеризует максимальное время, необходимое для чтения основы запроса (по умолчанию - 60). Если запрос не будет получен, то соединение будет прекращено, что необходимо для работы с огромными сообщениями или загрузками файлов.
- keepalive_timeout - максимальное время нахождения клиентского соединения на сервере (первый параметр - 75 по умолчанию, второй - 60 по умолчанию).
- client_header_timeout - максимальное время, необходимое для чтения заголовка запроса (параметр по умолчанию равен 60). Если в течение определенного времени заголовок не будет получен, соединение будет прекращено. Этот вариант таймаута необходим для предотвращения неполных или медленных запросов.
- lingering_timeout - этот цикл (по умолчанию 30) может повторяться в течение максимального времени, если включено lingering_close. Этот параметр задает максимальный промежуток времени для получения дополнительных данных от клиента.
Низкоуровневый таймаут TCP в NGINX
Если говорить о низком уровне, то в директиве listen есть keepalive, и этот параметр необходим для настройки TCP-сокета. Устанавливая его в положение off или on, мы используем важный механизм keepalive.
Мы также можем использовать список, разделенный двоеточиями:
- keepintvl - устанавливает TCP_KEEPINTVL
- keepidle - устанавливает TCP_KEEPIDLE
- keepcnt - задает TCP_KEEPCNT
Игнорируя любой из перечисленных параметров, вы оставляете настройки по умолчанию.
proxy_* Таймауты в NGINX
Здесь мы поделимся только тремя наиболее часто встречающимися значениями таймаута для NGINX, и это следующие значения:
- proxy_send_timeout - максимальное время, необходимое для отправки запроса (по умолчанию 60)
- *_connect_timeout - максимальное время, необходимое для соединения с сервером (как правило, не более 75, но по умолчанию установлено значение 60)
- *_read_timeout - максимальное время, необходимое для чтения ответа проксируемого сервера (по умолчанию 60)
fastcgi_* таймауты в NGINX
Говоря о настройках FastCGI-сервера, можно выделить несколько категорий, таких как:
- fastcgi_send_timeout - это характеристика максимального времени отправки запросов FastCGI-сервера (по умолчанию 60)
- *_connect_timeout - характеристика максимального времени соединения с сервером (как правило, не более 75, по умолчанию 60)
- *_read_timeout - максимальное время чтения ответа от сервера (по умолчанию 60)
Таймауты memcached_* в NGINX
В случае с таймаутами memcached_* опции довольно похожи на те, что мы уже приводили в статье, поэтому они следующие:
- memcached_send_timeout - характеризует максимальное время отправки запроса сервера Memcached (60)
- *_connect_timeout - максимальное время соединения с сервером (как правило, не более 75, по умолчанию 60)
- *_read_timeout - максимальное время чтения ответа сервера (по умолчанию 60)
Отключение общих таймаутов NGINX
При общем рассмотрении этой темы вы можете без труда воспользоваться списком настроек в сервере или http-блоке для отключения общих таймаутов, давайте рассмотрим пару основных примеров:
keepalive_timeout 1d
send_timeout 1d
client_body_timeout 1d
*_header_timeout 1d
proxy_send_timeout 1d
*_connect_timeout 1d
*_read_timeout 1d
fastcgi_read_timeout 1d
*_connect_timeout 1d
*_send_timeout 1d
memcached_read_timeout 1d
*_connect_timeout 1d
*_send_timeout 1d
Заключение
Конечно, с NGINX у вас есть огромный выбор опций, с помощью которых вы можете настраивать различные таймауты. Однако когда вы изменяете основополагающие таймауты, это может существенно повлиять на характеристики производительности. Надеюсь, эта статья была полезной для вас, и вы получили все важные сведения о таймаутах NGINX.