Увеличить клиент тайм-аут для соединений WebSocket с определенным URL

В CentOS 7 Linux я успешно использую HAProxy 1.5.14 перед Jetty 9, обслуживающим сайт Wordpress через FastCGI .

Он работает действительно хорошо, но для игры HTML5 / WebSocket на том же веб-сайте требуются гораздо более высокие таймауты клиента и сервера для соединений WebSocket с URL-адресом / ws / .

Итак. Я изменил файл /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

в разделе по умолчанию , моя игра WebSocket работает должным образом, но я не хочу, чтобы время ожидания для обычных HTTP-соединений составляло 1 час.

Когда я ставлю это секцию в backend ws-jetty , то выводится предупреждение, что клиент тайм-аута не является серверной опцией и, следовательно, игнорируется.

Когда я пробую строку timeout client 60 мин, если websocket_url , то выдается синтаксическая ошибка.

3
задан 3 March 2017 в 23:29
1 ответ

Если некоторые долгоживущие сеансы смешиваются с недолговечными сеансов (например: WebSocket и HTTP), стоит рассмотреть туннель тайм-аута , который отменяет тайм-аут клиента и сервер тайм-аута для туннелей, а также тайм-аут client-fin для полузакрытых соединений.

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

Когда таймаут туннеля активен в соединении - - что происходит автоматически для веб-сокетов, поскольку логика HTTP отключается после обновления соединения до веб-сокета - - большинство других тайм-аутов больше не срабатывают для этого соединения.

Обратите внимание, что это таймер простоя, а не таймер сеанса. Таймер сбрасывается движением с любого направления. Вы можете применить это к бэкэнду или в разделе значений по умолчанию. На самом деле он должен использоваться HAProxy только тогда, когда это уместно, но размещение его на конкретном сервере, где это необходимо, возможно, является лучшей практикой.

5
ответ дан 3 December 2019 в 05:40

Теги

Похожие вопросы