Рейтинг:1

Websocket от одного бэкэнда HAProxy к другому бэкэнду не работает

флаг cn

У меня есть два бэкенда (b1, b2), сидящие за одним и тем же интерфейсом (f1) в HAProxy, маршрутизация на основе имени хоста. Я могу установить веб-сокет как на b1, так и на b2 со своего ноутбука, однако, если я попытаюсь установить веб-сокет на b2 с b1 (через f1), я получаю ошибку 1006 (ненормальное закрытие - неожиданный EOF). Пингование b2 от b1 прошло успешно. Вот моя конфигурация:

интерфейс f1
    привязать 192.168.1.1:443 имя 192.168.1.1:443 ssl crt-list /var/etc/haproxy/ReverseProxyHTTP.crt_list  
    режим http
    журнал глобальный
    опция httplog
    опция http-keep-alive
    опцион вперед для

    http-запрос set-header X-Forwarded-Proto http, если !https
    http-запрос set-header X-Forwarded-Proto https, если https
    тайм-аут клиента 30000
    acl b1 var(txn.txnhost) -m beg -i b1
    acl b2 var(txn.txnhost) -m beg -i b2
    acl hdr_connection_upgrade hdr(соединение) -i обновить
    acl hdr_upgrade_websocket hdr (обновление) -i веб-сокет

    use_backend b1ws, если b1 hdr_connection_upgrade hdr_upgrade_websocket 
    use_backend b1, если b1 
    use_backend b2, если b2
серверная часть b1ws
    режим http
    идентификатор 119
    журнал глобальный
    тип палки-таблицы размер IP 50 КБ срок действия 30 м
    придерживаться источника
    источник баланса
    тайм-аут подключения 30000
    тайм-аут сервера 30000
    повторяет 3
    сервер s1 192.168.1.2:443 id 101 ssl проверить нет резолверов globalresolvers 

серверная часть b1
    режим http
    идентификатор 117
    журнал глобальный
    тип палки-таблицы размер IP 50 КБ срок действия 30 м
    придерживаться источника
    источник баланса
    тайм-аут подключения 30000
    тайм-аут сервера 30000
    повторяет 3
    сервер s1 192.168.1.2:443 id 101 ssl проверить нет резолверы globalresolvers alpn h2, http/1.1 

серверная часть b2
    режим http
    идентификатор 120
    журнал глобальный
    тип палки-таблицы размер IP 50 КБ срок действия 30 м
    придерживаться источника
    источник баланса
    тайм-аут подключения 30000
    тайм-аут сервера 30000
    повторяет 3
    туннель тайм-аута 3600s
    сервер s2 192.168.1.3:443 id 101 ssl проверить нет резолверов globalresolvers 

Примечание: b1 и b1ws указывают на один и тот же сервер и порт, хотя b1 предпочитает http2 для grpc. Если присутствует заголовок websocket, будет использоваться b1ws.

флаг cn
Вы пытаетесь подключиться с B2 -> F1 -> B1? Вы уверены, что HAProxy не направит соединение обратно к B2? Почему бы просто не подключиться напрямую из B2 -> B1, минуя LB?
Ryan avatar
флаг cn
@ shearn89 B1 -> F1 -> B2; haproxy не перенаправлял соединение обратно к B1, потому что, если я делаю простой http-доступ к B2 (через F1), он преуспевает. LB фактически переписывает некоторые URL-адреса из соображений совместимости, помимо всех других типичных причин использования балансировщика нагрузки.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.