У меня есть два бэкенда (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.