時間 telnet localhost 443 または # 時間 telnet localhost 80

時間 telnet localhost 443 または # 時間 telnet localhost 80

httpおよびhttpsポートで構成されたCentOS 6.7 ApacheサーバーのバージョンであるApache / 2.4.7(Unix)サーバーがあります。 SSL 固有の設定以外は同じように構成されます。

最も関連性の高い設定は

KeepAlive on
MaxKeepAliveRequests 50
KeepAliveTimeout 65
Timeout 65
AcceptFilter https none

.htaccessファイルやその他の明白な設定ファイルはありません。

ただし、次のコマンドを使用して元の接続タイムアウトをテストすると、

時間 telnet localhost 443 または # 時間 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にはhttpとは異なる「KeepAlive」および/または「Timeout」キーワード形式がありますか?

ベストアンサー1

Linuxを使用しているので、AcceptFilterTCP_DEFER_ACCEPTLinuxでソケットオプションを使用する機能です。 Apacheソースコードは、httpdこのために30秒のソケットオプション値が使用されることを示しています(ハードコードされています)。

もしあなたのApache返品モジュールを使用すると、mod_reqtimeoutこれがデフォルトの動作である可能性があります。RequestReadTimeout参加する。デフォルトではRequestReadTimeout待機少なくともクライアント接続がタイムアウトする前にヘッダーを読み取るには20秒かかります。

だからこれらを総合すると、おそらくHTTP要求時間が50秒を超えていることがわかります。いいえHTTPを無効にします(HTTPSのみ)。これは、30秒()+ 20秒()AcceptFilterがあることを意味します。 AcceptFilterRequestReadTimeoutしかし、無効にしたHTTPS要求でAcceptFilter次の問題が発生したようです。ただ20秒のタイムアウトのためRequestReadTimeout

役に立ったことを願っています!

おすすめ記事