В 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 3

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