web-dev-qa-db-ja.com

Haproxy-タイムアウトHTTPリクエストとタイムアウトhttp-keep-aliveとタイムアウトサーバー

私はどのように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分かかるレポートを実行できるようにする必要があります。

7
Mike Levy

少し明確にするために。これもあなたの質問に答えてくれるといいのですが。

タイムアウトhttp-リクエスト

最初のクライアントバイトが受信されてから最後のバイトがクライアントに送信されるまでの時間です(キープアライブに関係なく)。そのため、バックエンドが遅すぎるか、クライアントがリクエストを送信するのが遅すぎる場合、通信全体にこれよりも時間がかかる可能性があり、リクエストはドロップされます(そしてクライアントにタイムアウトが送信されます)。

タイムアウトhttp-keep-alive

Haproxyとクライアントの間の接続を開いたままにする時間(クライアントの応答が送信された後)。これは、バックエンドの応答時間とは関係ありません。これは、1つのリクエストの長さ(つまり、http-requestタイムアウト)とは関係ありません。これにより、ユーザーが複数のリソース(つまり、html、img、js)をリクエストした場合の応答が速くなります。キープアライブを使用すると、単一の要求で同じTCP接続を利用できます。このようにして、Webページ全体の読み込み時間が短縮されます。

タイムアウトサーバー

これは、バックエンドサーバーのタイムアウトです。到達すると、haproxyは504(ゲートウェイタイムアウト)で応答します。これは、プロキシとバックエンド間の接続についてのみであるため、キープアライブとは何の関係もありません。

16
edlerd