在 CentOS 7 Linux 上,我在 Jetty 9 前面成功地使用了 HAProxy 1.5.14,通过 FastCGI 为 Wordpress 站点提供服务。
/ws/
它工作得非常好,但是对于同一网站上的 HTML5/WebSocket 游戏来说,WebSocket 连接到URL 需要更高的客户端和服务器超时。
所以我将/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 60m if websocket_url
,会报告语法错误。
何时
timeout tunnel
在连接上处于活动状态 - 这对于 Web 套接字会自动发生,因为一旦连接升级到 Web 套接字,HTTP 逻辑就会分离 - 大多数其他超时不再为该连接触发。请注意,这是一个空闲计时器,而不是会话计时器。计时器由来自任一方向的流量重置。您可以将其应用于后端或默认部分。它应该只在适当的时候由 HAProxy 实际使用,但是将它放在需要它的特定后端可以说是最佳实践。