Все, что вам нужно знать о таймаутах NGINX

Все, что вам нужно знать о таймаутах NGINX

23.05.2024
Автор: HostZealot Team
2 мин.
163

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.

# Как сделать Поделиться:
Статьи по Теме