time telnet localhost 443 或 # time telnet localhost 80

time telnet localhost 443 或 # time telnet localhost 80

我有一个 CentOS 6.7 apache 服务器版本:Apache/2.4.7 (Unix) 服务器,配置了 http 和 https 端口。除了 SSL 特定设置之外,它们的配置相同。

最相关的设置是

KeepAlive on
MaxKeepAliveRequests 50
KeepAliveTimeout 65
Timeout 65
AcceptFilter https none

没有 .htaccess 文件或其他明显的配置文件。

但是当我使用类似命令测试原始连接超时时

time telnet localhost 443 或 # time telnet localhost 80

我得到了意想不到的错误结果。

对于http我得到

time telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

real    0m51.423s
user    0m0.001s
sys     0m0.002s

对于 SSL https 我得到

time telnet localhost 443
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

real    0m20.018s
user    0m0.001s
sys     0m0.002s

如您所见,nighter 显示预期的 65 秒超时,http 为 50 秒,https 为 20 秒。

任何配置文件中都没有设置替代超时。

我还考虑了内核 TCP 设置。 tcp_fin_timeout=60 tcp_keepalive_time=7200 tcp_synack_retries=5

SSL 的这 20 秒从何而来?为什么保活设置和超时设置被忽略? SSL 是否有不同形式的“KeepAlive”和/或“Timeout”关键字使其与 http 不同?

答案1

由于您使用的是 Linux,AcceptFilter功能是TCP_DEFER_ACCEPT在 Linux 上使用套接字选项。 Apache 源代码显示httpd为此使用 30 秒的套接字选项值(硬编码)。

如果你的阿帕奇mod_reqtimeout模块,这可能是默认行为RequestReadTimeout参与。默认情况下,RequestReadTimeout等待至少在客户端连接超时之前读取标头需要 20 秒。

所以把这些放在一起,或许您会看到 HTTP 请求超时 50 秒,因为您有不是禁用AcceptFilterHTTP(仅 HTTPS),这意味着您有 30 秒 ( AcceptFilter) 加 20 秒 (RequestReadTimeout )。 对于 HTTPS 请求,您已禁用AcceptFilter,我怀疑您遇到了只是由于 20 秒超时RequestReadTimeout

希望这可以帮助!

答案2

你有请求超时apache模块加载了吗?

尝试这个命令看看:apachectl -M | grep reqtimeout

如果是这样,则默认为 20 秒http://httpd.apache.org/docs/2.4/mod/mod_reqtimeout.html:

语法:RequestReadTimeout [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate]

默认值: header=20-40,MinRate=500 body=20,MinRate=500


你可以改变这个时间为 60 秒(最多 90 秒,包括接受请求),并在 /etc/httpd/conf/httpd.conf (或某些 vhosts.conf 类型的文件)中包含以下内容:

RequestReadTimeout header=60-90,MinRate=500 body=60-90,MinRate=500


你也可以测试使用以下命令之前/之后:

time openssl s_client -connect your.ip.address.here:443

为我:

real    0m20.222s
user    0m0.012s
sys 0m0.000s

real    1m0.527s
user    0m0.017s
sys 0m0.006s

相关内容