Модуль Apache mod_reqtimeout
| Описание: | Задание тайм-аута и минимальной скорости передачи данных при получении запросов |
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | reqtimeout_module |
| Файл исходного кода: | mod_reqtimeout.c |
| Совместимость: | Доступен в Apache HTTPD 2.2.15 и более поздних версиях |
Краткое описание
Этот модуль предоставляет удобный способ задания тайм-аутов и минимальной скорости передачи данных при получении запросов. Если произойдёт тайм-аут или скорость передачи данных окажется слишком низкой, сервер закроет соответствующее соединение.
Это событие записывается в LogLevel info.
При необходимости директиву LogLevel можно изменить, чтобы явно записывать это событие в журнал:
LogLevel reqtimeout:info
Примеры
- Выделить 5 секунд на завершение TLS-рукопожатия, 10 секунд на получение заголовков запроса и 30 секунд на получение тела запроса:
RequestReadTimeout handshake=5 header=10 body=30
- Выделить не менее 10 секунд на получение тела запроса. Если клиент отправляет данные, увеличивать тайм-аут на 1 секунду за каждые полученные 1000 байт без верхнего предела для тайм-аута (за исключением предела, косвенно задаваемого директивой
LimitRequestBody):RequestReadTimeout body=10,MinRate=1000
- Выделить не менее 10 секунд на получение заголовков запроса. Если клиент отправляет данные, увеличивать тайм-аут на 1 секунду за каждые полученные 500 байт. При этом на получение заголовков запроса должно отводиться не более 30 секунд:
RequestReadTimeout header=10-30,MinRate=500
- Обычно на сервере следует настроить тайм-ауты как для заголовков, так и для тела запроса. Если для виртуальных хостов http и https используется общая конфигурация, не следует задавать слишком низкие значения тайм-аутов:
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
Директива RequestReadTimeout
| Описание: | Задание значений тайм-аута для завершения TLS-рукопожатия, получения заголовков запроса и/или тела запроса от клиента. |
|---|---|
| Синтаксис: | RequestReadTimeout [handshake=timeout[-maxtimeout][,MinRate=rate] [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate] |
| Значение по умолчанию: | RequestReadTimeout handshake=0 header=20-40,MinRate=500 body=20,MinRate=500 |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_reqtimeout |
| Совместимость: | Доступна в версии 2.2.15 и более поздних; в версии 2.3.14 и более ранних по умолчанию была отключена. Этап handshake доступен начиная с версии 2.4.39. |
Эта директива позволяет задавать различные тайм-ауты для завершения TLS-рукопожатия, получения заголовков запроса и/или тела запроса от клиента. Если клиент не завершит каждый из этих этапов за настроенное время, будет отправлена ошибка 408 REQUEST TIME OUT.
Для виртуальных хостов SSL значение тайм-аута handshake обозначает время, необходимое для выполнения начального SSL-рукопожатия. Если браузер пользователя настроен на проверку списков отзыва сертификатов, а сервер CRL недоступен, начальное SSL-рукопожатие может занять значительное время, пока браузер не прекратит ожидание ответа от сервера CRL. Поэтому при настройке тайм-аута handshake для виртуальных хостов SSL следует учитывать эту возможную задержку (если необходимо). Значения тайм-аута для тела запроса включают время, необходимое для повторного согласования SSL (если оно требуется).
Если используется AcceptFilter (обычно это так в Linux и FreeBSD), сокет не передаётся процессу сервера до получения как минимум одного байта (или всего запроса для httpready). Тайм-ауты рукопожатия и заголовков, настроенные с помощью RequestReadTimeout, вступают в силу только после того, как процесс сервера получит сокет.
Для каждого из трёх этапов тайм-аута (рукопожатие, заголовки или тело запроса) тайм-аут можно задать одним из трёх способов:
-
Фиксированное значение тайм-аута:
stage=timeoutВремя в секундах, отведённое на завершение всего этапа (выполнение рукопожатия, чтение всех заголовков запроса или тела запроса). Значение 0 означает отсутствие ограничения.
-
Отключение модуля для виртуального хоста:
handshake=0 header=0 body=0
Полностью отключает
mod_reqtimeout(обратите внимание:handshake=0уже используется по умолчанию, поэтому его можно опустить). -
Значение тайм-аута, увеличиваемое при получении данных:
stage=timeout,MinRate=data_rateТо же, что и выше, но при получении данных значение тайм-аута увеличивается в соответствии с указанной минимальной скоростью передачи данных (в байтах в секунду).
-
Значение тайм-аута, увеличиваемое при получении данных, с верхним пределом:
stage=timeout-maxtimeout,MinRate=data_rateТо же, что и выше, но тайм-аут не будет увеличен выше второго значения указанного диапазона тайм-аута.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_reqtimeout.html