我遇到一个奇怪的 Apache 问题,同一远程网络上的两个设备中的一个设备将在 60 秒时超时。通过将 TimeOut 设置为 120 秒,我可以将时间延长到两分钟,但第二个设备仍然失去与服务器的连接。 A 得到一个通用的“由于服务器停止响应而无法打开页面”(Safari)。
我的测试是在我的桌面和 iPad Pro 上加载一个简单的页面(仅打印日期的 PHP 脚本)。我等了整整 60 秒并刷新 iPad,然后收到错误消息。这一结果可以在许多最终用户网络上复制。
我的第一个想法是 Apache 需要为远程网络上的每个实体维护一个会话,因为 Apache 会看到它们源自相同的 IP,但 mod_session 没有任何效果。
目标服务器是运行 Centos 7、Apache 2.4(已完全修补)和 PHP 5.6.4 的 AWS 实例。 (我知道,有一个项目正在进行中以更新到 PHP 7.X)。
我要指出的是,这不会发生在运行 Apache 2.2 的 Centos 6 服务器上,并且现有环境只有 4 个或更少的用户,因为它是一个开发环境。
任何帮助将不胜感激。
设置:
httpd.conf:
超时 300
KeepAlive 打开
预叉设置:
StartServers 8<br>
MinSpareServers 5<br>
MaxSpareServers 20<br>
ServerLimit 256<br>
MaxClients 256<br>
MaxRequestsPerChild 4000<br>
MaxConnectionsPerChild 0<br>
一些附加说明:这似乎只发生在 PHP 文件中,即使是那些只包含文本的文件。
答案1
对于那些可能遇到相同症状的人:问题是从旧版本操作系统带来的内核设置。
设置了“net.ipv4.tcp_tw_recycle=1”,但它不应该设置。命令
"sysctl net.ipv4.tcp_tw_recycle=0"
解决了一切。如果您遇到同样的问题,只需运行该命令并立即查看结果。
如果需要恢复,只需运行:
"sysctl net.ipv4.tcp_tw_recycle=1"
撤销。当然,将其添加到 /etc/sysctl.conf 文件中将使其成为永久性更改。
希望这可以在某个时候帮助某人。