源自 NATed 网络的会话的奇怪问题

源自 NATed 网络的会话的奇怪问题

我遇到一个奇怪的 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 文件中将使其成为永久性更改。

希望这可以在某个时候帮助某人。

相关内容