web-dev-qa-db-ja.com

Apache:HTTP1.0リクエストに対してHTTP1.1またはPersistent / KeepAlive接続を強制します

RHEL5.8で実行されているApache2.2.3サーバー上のすべてのHTTPリクエストに対してキープアライブまたは持続的接続を強制したい。多くのWebクローラーが何らかの理由でHTTP1.0を使用しています。永続的な接続を強制するか、Apache構成の[キープアライブオン]設定で永続的なHTTPが発生するように、何らかの方法でそれらの接続にHTTP1.1を使用させたいと思います。これは、開かれているTCP接続の数を減らしたいためです。どうすればこれを実現できますか?

5
usedTobeaMember

HTTP 1.0はキープアライブ(別名持続的接続)をサポートしておらず、HTTP 1.1を使用するように依頼するシステムはありません。400xを返すことはできますが、接続はすでに作成されており、標準的な方法はありません。代わりにHTTP1.1を試してください。すべてのクライアントがHTTP1.1を必要としていることを確認したとしても、キープアライブヘッダーで「閉じる」を送信したり、接続をドロップしたりして、リクエストごとに1つの接続を実行することをサービスで停止することはできません。

Linuxカーネルオプションがいくつかあります(具体的にはDEFER_ACCEPTおよびTIME_WAIT)TCP接続テーブルを減らすのに役立ちますが、状況を改善するのではなく悪化させるのが本当に簡単なので、何をしているのかを理解していない限り、そのルートをたどることはお勧めしません。

しかし、もっと広く考えると、あなたは間違った方法で問題を解決しようとしていると思います。インターネットは暗く、恐怖に満ちています。ランダムなボットが原因でTCP接続制限の問題が発生している場合は、SYNフラッドやその他のDDOSタイプのイベントに対して絶望的に脆弱であり、ボットはWebサーバーの単なるシグナルです。スケールが小さすぎるか、攻撃を受けているか、設定が間違っています。いずれにしても、何かが間違っています。

本当にApacheに到着するリクエストの種類を制御したい場合は、Apacheの前にWAF(Webアプリケーションファイアウォール)またはロードバランサーを配置して、高価なApache接続を消費する前に不正なリクエストを除外する必要があります。多くの場合、SSL/TLS暗号化を行うCPUを集中的に使用する作業をオフロードすることもできます。

私はこれがあなたが探している迅速な解決策や答えではないことを知っていますが、問題が何であれ、この道を進んでそれを解決することは非常にありそうにありません。

1
Nath

KeepAliveTimeoutを高い数値に設定するだけです。

このディレクティブの手動エントリは次のとおりです。 http://httpd.Apache.org/docs/2.4/mod/core.html#keepalivetimeout

「KeepAliveTimeoutを高い値に設定すると、負荷の高いサーバーでパフォーマンスの問題が発生する可能性があります。タイムアウトが長いほど、アイドル状態のクライアントとの接続を待機するサーバープロセスが多くなります。」

0
Tianyin Xu