В 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
, то выдается синтаксическая ошибка.
Если некоторые долгоживущие сеансы смешиваются с недолговечными сеансов (например: WebSocket и HTTP), стоит рассмотреть
туннель тайм-аута
, который отменяеттайм-аут клиента
исервер тайм-аута
для туннелей, а такжетайм-аут client-fin
для полузакрытых соединений.http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4.2-timeout%20client
Когда таймаут туннеля
активен в соединении - - что происходит автоматически для веб-сокетов, поскольку логика HTTP отключается после обновления соединения до веб-сокета - - большинство других тайм-аутов больше не срабатывают для этого соединения.
Обратите внимание, что это таймер простоя, а не таймер сеанса. Таймер сбрасывается движением с любого направления. Вы можете применить это к бэкэнду или в разделе значений по умолчанию. На самом деле он должен использоваться HAProxy только тогда, когда это уместно, но размещение его на конкретном сервере, где это необходимо, возможно, является лучшей практикой.