В HAproxy мое websocket соединение закрывается через 50 секунд. Как это изменить?
Я использую Haproxy с tornado для websocket. Мое соединение работает нормально, если я напрямую подключаюсь к tornado, но если я использую HAproxy с конфигурацией ниже, то соединение закрывается через 50 секунд. Мой конфигурационный файл Haproxy приведен ниже.
global
daemon
maxconn 4032
pidfile /var/run/haproxy.pid
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option http-server-close
maxconn 4032
frontend http-in
bind *:80
acl is_websocket hdr_end(host) -i WebSocket
use_backend servers if is_websocket
default_backend servers
option redispatch
option http-server-close
maxconn 2000
contimeout 500000
clitimeout 500000
srvtimeout 500000
contimeout 500000
timeout contimeout 500000
timeout connect 500000
backend servers
server server1 127.0.0.1:8886 maxconn 4032
Теперь с помощью приведенной выше конфигурации мое websocket соединение автоматически теряется через 50 секунд. Я хочу сделать постоянное соединение, так есть ли способ сделать соединение постоянным в HAproxy ?
3 ответа:
Чтобы лучше понять, как HAProxy работает с websocket, вы должны прочитать эту статью: https://www.haproxy.com/blog/websockets-load-balancing-with-haproxy/
Обратите внимание, что выключать тайм-ауты-плохая идея...
Батист
Я изменил время ожидания подключения 0 мс, время ожидания клиента 0 мс, тайм-аут 0 мс сервера в секции defaults потом меня подключение постоянное подключение, потому что если я даю значение 0, то будет бесконечное значение времени ожидания подключения.
Вы не должны этого делать, потому что эти параметры применяются и к обычному HTTP-трафику. Установить время ожидания подключения клиента / сервера для соответствующих значений и использовать
timeout tunnel
для WebSockets.Тайм-аут туннеля применяется, когда двунаправленное соединение установленный между клиентом и сервером, и соединение остается неактивным в обоих случаях. направление. Этот тайм-аут заменяет тайм-ауты клиента и сервера один раз соединение становится туннелем.
(см.: http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#timeout%20tunnel )
Я нашел ответ,
Я изменил
timeout connect 0ms, timeout client 0ms, timeout server 0ms
в разделеdefaults
, то мое соединение является постоянным соединением, потому что если я дам значение 0, то это будет бесконечное значение времени ожидания соединения.Мой окончательный рабочий конфиг ниже,
global daemon maxconn 4032 pidfile /var/run/haproxy.pid defaults mode http timeout connect 0ms timeout client 0ms timeout server 0ms option http-server-close maxconn 4032 frontend http-in bind *:80 acl is_websocket hdr_end(host) -i WebSocket use_backend servers if is_websocket default_backend servers option redispatch option http-server-close maxconn 2000 contimeout 500000 clitimeout 500000 srvtimeout 500000 contimeout 500000 timeout contimeout 500000 timeout connect 500000 timeout client 500000 backend servers server server1 127.0.0.1:8886 maxconn 4032