私はどのようにhaproxyオプションを頭に抱えようとしています
timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>
互いに相互作用します。私は、haproxyロードバランサーの背後にある2つのアプリサーバーでApacheウェブサイトを実行しています。現時点ではキープアライブを有効にしていませんが、サイトを最適化するのに役立つと思うので、有効にしようと試みています。私の目標は、ブラウザーとhaproxy間の接続のキープアライブを有効にすることでしたが、haproxyとApacheの間のキープアライブを無効にすることでした。私はこれを達成しました
option http-server-close
次に、キープアライブタイムアウトの設定を検討しています。私は、タイムアウトhttp-requestオプション、タイムアウトhttp-keep-aliveオプション、およびタイムアウトサーバーオプションの haproxyマニュアル を研究しています。マニュアルを正しく理解している場合、タイムアウトhttp-keep-aliveは新しいリクエスト間で接続を開いたままにする時間であり、タイムアウトhttp-requestは接続を閉じる前に応答のヘッダーを待機する時間です。しかし、私が理解できないように見えるのは、タイムアウトサーバーが指示するものです。タイムアウトサーバーは完全な応答を待つ時間だと言いたいのですが、だれでもそれを確認できますか?タイムアウトサーバーが完全な応答を待機する時間であるというのが正しい場合、キープアライブタイムアウト設定に影響を与えてはいけないのは正しいことですか?
これが私が変更に取り組んでいる私のhaproxy設定です:
global
maxconn 4096
pidfile /var/run/haproxy.pid
daemon
defaults
mode http
retries 3
option redispatch
maxconn 5000
timeout connect 5000
timeout client 300000
timeout server 300000
listen HTTP *:80
mode http
cookie HTTP insert nocache
balance roundrobin
#option httpclose # I just commented this out in favor of http-server-close
option http-server-close
timeout http-keep-alive 500 # from the haproxy manual suggestion of "tens to hundreds of ms"
timeout http-request 5000
option forwardfor
stats enable
stats uri /my-lb-status
stats auth myLbStatus:123456
reqadd X-Forwarded-Proto:\ http
option httpchk GET /robots.txt HTTP/1.0
server SERVER_A 1.2.3.4:80 cookie app_01 check
server maintenance 127.0.0.1:8080 backup
結局のところ、私の目標は、ブラウザーとhaproxyの間でキープアライブをオンにできるようにすることであり、アプリサーバーでの実行に2〜3分かかるレポートを実行できるようにする必要があります。
少し明確にするために。これもあなたの質問に答えてくれるといいのですが。
タイムアウトhttp-リクエスト
最初のクライアントバイトが受信されてから最後のバイトがクライアントに送信されるまでの時間です(キープアライブに関係なく)。そのため、バックエンドが遅すぎるか、クライアントがリクエストを送信するのが遅すぎる場合、通信全体にこれよりも時間がかかる可能性があり、リクエストはドロップされます(そしてクライアントにタイムアウトが送信されます)。
タイムアウトhttp-keep-alive
Haproxyとクライアントの間の接続を開いたままにする時間(クライアントの応答が送信された後)。これは、バックエンドの応答時間とは関係ありません。これは、1つのリクエストの長さ(つまり、http-requestタイムアウト)とは関係ありません。これにより、ユーザーが複数のリソース(つまり、html、img、js)をリクエストした場合の応答が速くなります。キープアライブを使用すると、単一の要求で同じTCP接続を利用できます。このようにして、Webページ全体の読み込み時間が短縮されます。
タイムアウトサーバー
これは、バックエンドサーバーのタイムアウトです。到達すると、haproxyは504(ゲートウェイタイムアウト)で応答します。これは、プロキシとバックエンド間の接続についてのみであるため、キープアライブとは何の関係もありません。