Модуль 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 означает отсутствие ограничения.
-
Отключение модуля для vhost:
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