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
。
役に立ったことを願っています!
答え2
あなたはリクエストがタイムアウトしましたApacheモジュールがロードされていますか?
このコマンドを試して、次を確認してください。apachectl -M | grep reqtimeout
その場合、デフォルト値は20秒です。http://httpd.apache.org/docs/2.4/mod/mod_reqtimeout.html:
構文: RequestReadTimeout [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate]
デフォルト:ヘッダー=20-40、MinRate=500本文=20、MinRate=500
あなたはできます変化これは60秒(要求の受け入れを含む最大90秒)で、/ etc / httpd / conf / httpd.conf(または一部のvhosts.confタイプファイル)に次の内容が含まれています。
RequestReadTimeout header=60-90,MinRate=500 body=60-90,MinRate=500
あなたもできますテスト次のコマンドを使用する前と後:
time openssl s_client -connect your.ip.address.here:443
私のため:
今後
real 0m20.222s
user 0m0.012s
sys 0m0.000s
後ろに
real 1m0.527s
user 0m0.017s
sys 0m0.006s