当我尝试在time telnet XX.XX.XX.XX 80
上apache 2.4.6 server
我的centOS7
时,结果是51 sec
。
我设法用reqtimeout_module
将其降低
RequestReadTimeout header=1
RequestReadTimeout body=1
,但永远不会少于32秒。找到的关于此的信息是2.4.6
上的一个已知错误(如果我理解正确的话),并且30秒是硬编码的,无法更改。
所以我将其更新为2.4.33
,但没有任何变化。有什么办法可以减少这段时间?
答案 0 :(得分:0)
您可以在AcceptFilter http none
内设置/etc/httpd/conf/httpd.conf
。
默认情况下,在Linux AcceptFilter
上使用TCP_DEFER_ACCEPT
套接字选项(来自manpages):
TCP_DEFER_ACCEPT (since Linux 2.4)
Allow a listener to be awakened only when data arrives on the
socket. Takes an integer value (seconds), this can bound the
maximum number of attempts TCP will make to complete the
connection. This option should not be used in code intended
to be portable.
centos7
上该选项的默认值似乎是30
(see this answer)。
另一种方法是使用apache-module-sockopts:
LoadModule sockopts_module libexec/mod_sockopts.so
AddModule mod_sockopts.c
<IfModule mod_sockopts.c>
# TCP_DEFER_ACCEPT
SoTcpDeferAccept 20
</IfModule>