增加与特定 URL 的 WebSocket 连接的客户端超时时间

增加与特定 URL 的 WebSocket 连接的客户端超时时间

在 CentOS 7 Linux 上,我成功地在前面使用了 HAProxy 1.5.14Jetty 9 通过 FastCGI 为 Wordpress 网站提供服务

它确实运行得很好,但是对于同一网站上的 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 60m if websocket_url,报告了语法错误。

答案1

如果一些长寿命会话与短寿命会话混合在一​​起(例如:WebSocket 和 HTTP),则值得考虑timeout tunnel,它会覆盖timeout clienttimeout server用于隧道以及timeout client-fin半关闭连接。

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

什么时候timeout tunnel在连接上处于活动状态 - - 对于 Web 套接字,这会自动发生,因为一旦连接升级为 Web 套接字,HTTP 逻辑就会分离 - - 对于该连接,大多数其他超时不会再触发。

请注意,这是一个空闲计时器,而不是会话计时器。计时器由来自任一方向的流量重置。您可以将其应用于后端或默认部分。它应该只在适当的时候由 HAProxy 实际使用,但将其放在需要它的特定后端可以说是最佳做法。

相关内容