web-dev-qa-db-ja.com

特定のURLへのWebSocket接続のクライアントタイムアウトを増やす

CentOS 7 Linuxでは、HAProxy 1.5.14を Jetty 9がWordpressサイトに提供 の前で使用することに成功しました。

これは非常にうまく機能しますが、同じWebサイトでのHTML5/WebSocketゲームの場合、/ws/ URLへのWebSocket接続には、はるかに高いクライアントとサーバーのタイムアウトが必要です。

そのため、/etc/haproxy/haproxy.cfgファイルを次のように変更しました。

global
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    tune.ssl.default-dh-param 2048

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m    # HOW TO INCREASE FOR /ws/ ?
    timeout server          1m    # HOW TO INCREASE FOR /ws/ ?
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend public
    bind 144.76.184.151:80
    bind 144.76.184.151:443 ssl crt /etc/pki/tls/certs/slova.de.pem

    acl websocket_url path_end /ws/
    #timeout client 60m if websocket_url   # SYNTAX ERROR
    use_backend ws-jetty if websocket_url
    default_backend jetty

backend jetty
    server domain 127.0.0.1:8080 send-proxy

backend ws-jetty
    timeout client 60m    # IS IGNORED HERE
    timeout server 60m
    server domain 127.0.0.1:8080 send-proxy

設定すると

    timeout client 60m
    timeout server 60m

defaultsセクションでは、WebSocketゲームは必要に応じて機能しますが、通常のHTTP接続で1時間のタイムアウトを設定したくありません。

そのセクションをbackend ws-jettyに入れると、警告が出力されます。その timeout client はバックエンドオプションではないため、無視されます。

timeout client 60m if websocket_urlを試すと、構文エラーが報告されます。

3

存続期間の長いセッションが存続期間の短いセッションと混合している場合(例:WebSocketやHTTP)、トンネルのtimeout tunneltimeout client、およびハーフクローズ接続のtimeout serverをオーバーライドするtimeout client-finを検討する価値があります。

http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4.2-timeout%20client

timeout tunnel が接続でアクティブな場合--接続がWebソケットにアップグレードされるとHTTPロジックが切り離されるため、Webソケットでは自動的に行われます--他のほとんどのタイムアウトは起動しませんその接続の詳細。

これはアイドルタイマーであり、セッションタイマーではないことに注意してください。タイマーはどちらかの方向からのトラフィックによってリセットされます。これをバックエンドまたはデフォルトセクションに適用できます。 HAProxyは適切な場合にのみ実際に使用する必要がありますが、必要な場合は特定のバックエンドに配置するのが間違いなくベストプラクティスです。

5