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を使用しているので、AcceptFilter
TCP_DEFER_ACCEPT
Linuxでソケットオプションを使用する機能です。 Apacheソースコードは、httpd
このために30秒のソケットオプション値が使用されることを示しています(ハードコードされています)。
もしあなたのApache返品モジュールを使用すると、mod_reqtimeout
これがデフォルトの動作である可能性があります。RequestReadTimeout
参加する。デフォルトではRequestReadTimeout
待機少なくともクライアント接続がタイムアウトする前にヘッダーを読み取るには20秒かかります。
だからこれらを総合すると、おそらくHTTP要求時間が50秒を超えていることがわかります。いいえHTTPを無効にします(HTTPSのみ)。これは、30秒()+ 20秒()AcceptFilter
があることを意味します。 AcceptFilter
RequestReadTimeout
しかし、無効にしたHTTPS要求でAcceptFilter
次の問題が発生したようです。ただ20秒のタイムアウトのためRequestReadTimeout
。
役に立ったことを願っています!