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
を試すと、構文エラーが報告されます。
存続期間の長いセッションが存続期間の短いセッションと混合している場合(例:WebSocketやHTTP)、トンネルの
timeout tunnel
とtimeout 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は適切な場合にのみ実際に使用する必要がありますが、必要な場合は特定のバックエンドに配置するのが間違いなくベストプラクティスです。