apache / 2.4 / reference / mod-mod_reqtimeout.html

Apache 模块 mod_reqtimeout

Description: 设置超时和接收请求的最小数据速率
Status: Extension
Module Identifier: reqtimeout_module
Source File: mod_reqtimeout.c
Compatibility: 在 Apache HTTPD 2.2.15 和更高版本中可用

Summary

该模块提供了一种方便的方法来设置超时和接收请求的最小数据速率。如果发生超时或数据速率太低,服务器将关闭相应的连接。

此记录在LogLevel info处。

如果需要,可以调整LogLevel指令以显式记录它:

LogLevel reqtimeout:info

Examples

await 5 秒以完成 TLS 握手,await 10 秒以接收请求 Headers,await 30 秒以接收请求正文:

RequestReadTimeout handshake=5 header=10 body=30
  • 至少 await 10 秒钟以接收请求正文。如果 Client 端发送数据,则每接收 1000 个字节将超时增加 1 秒,没有超时上限(除了由LimitRequestBody间接给出的限制):
RequestReadTimeout body=10,MinRate=1000

至少 await 10 秒钟以接收请求 Headers。如果 Client 端发送数据,则每接收 500 个字节将超时增加 1 秒。但请求 Headers 的时间不能超过 30 秒:

RequestReadTimeout header=10-30,MinRate=500

通常,服务器应同时配置 Headers 超时和主体超时。如果将通用配置用于 http 和 https 虚拟主机,则超时不应设置得太低:

RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

RequestReadTimeout Directive

Description: 设置超时值以完成 TLS 握手,从 Client 端接收请求 Headers 和/或正文。
Syntax: RequestReadTimeout [handshake=timeout[-maxtimeout][,MinRate=rate] [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate]
Default: RequestReadTimeout handshake=0 header=20-40,MinRate=500 body=20,MinRate=500
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_reqtimeout
Compatibility: 在版本 2.2.15 和更高版本中可用;在版本 2.3.14 和更早版本中默认禁用。从 2.4.39 版开始,handshake阶段可用。

该指令可以设置各种超时来完成 TLS 握手,从 Client 端接收请求 Headers 和/或请求正文。如果 Client 端未能在配置的时间内完成所有这些阶段,则会发送408 REQUEST TIME OUT错误。

对于 SSL 虚拟主机,handshake超时值是进行初始 SSL 握手所需的时间。如果将用户的浏览器配置为查询证书吊销列表,并且无法访问 CRL 服务器,则初始 SSL 握手可能要花费相当长的时间,直到浏览器放弃 await CRL 为止。因此,对于 SSL 虚拟主机,handshake超时应考虑到这种可能的开销(如有必要)。主体超时值包括 SSL 重新协商所需的时间(如有必要)。

当使用AcceptFilter时(通常在 Linux 和 FreeBSD 上就是这种情况),在至少接收到一个字节(或对httpready的整个请求)之前,不会将套接字发送到服务器进程。用RequestReadTimeout配置的握手和 Headers 超时仅在服务器进程收到套接字后才有效。

对于三个超时阶段(握手,Headers 或正文)中的每个阶段,都有三种指定超时的方法:

  • 固定的超时值

stage=timeout

完成整个阶段所需的时间(以秒为单位)(握手,读取所有请求 Headers 或正文)。值为 0 表示没有限制。

  • 禁用虚拟主机模块

handshake=0 header=0 body=0

这会完全禁用mod_reqtimeout(请注意handshake=0已经是默认设置,可以省略)。

  • 接收数据时增加的超时值

stage=timeout,MinRate=data_rate

与上面相同,但是无论何时接收到数据,超时值都会根据指定的最小数据速率(以字节/秒为单位)增加。

  • 接收数据时增加的超时值,带有上限

stage=timeout-maxtimeout,MinRate=data_rate

与上面相同,但是超时不会增加到指定超时范围的第二个值以上。