Linux

源自 NATed 網路的會話的奇怪問題

  • August 24, 2021

我遇到了一個奇怪的 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 On

前叉設置:

StartServers       8<br>
MinSpareServers    5<br>
MaxSpareServers   20<br>
ServerLimit      256<br>
MaxClients       256<br>
MaxRequestsPerChild  4000<br>
MaxConnectionsPerChild 0<br>

一些附加說明:這似乎只發生在 PHP 文件中,即使是那些只包含文本的文件。

對於那些可能偶然發現相同症狀的人:問題是從舊版本的作業系統帶來的核心設置。

“net.ipv4.tcp_tw_recycle=1”已設置,但不應該設置。命令

"sysctl net.ipv4.tcp_tw_recycle=0"

解決了一切。如果您遇到同樣的問題,只需執行該命令並立即查看結果。

如果您需要還原,只需執行:

"sysctl net.ipv4.tcp_tw_recycle=1"

撤銷。當然,將其添加到 /etc/sysctl.conf 文件將使其永久更改。

希望這在某些時候對某人有所幫助。

引用自:https://unix.stackexchange.com/questions/664906