時間 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

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

答え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

関連情報