У меня есть сценарий, который требует, чтобы все запросы веб-сокетов из одного браузера направлялись на один и тот же сервер приложений. В настоящее время я использую HAProxy для LB. Я заметил, что он отлично работает для «обычных» HTTP-запросов, но когда я пытаюсь выполнить запрос WebSocket, липкий файл cookie не вставляется в ответ. Я еще не углубился в исходный код HAProxy, но, похоже, происходит то, что HAProxy не вставляет файлы cookie для ответов 101 Switching Protocol? Это всего лишь предположение.
Вот мои настройки: Браузер ‹ -- > Stunnel ‹ -- > HAProxy ‹ --- > 2 сервера Node.js
Моя конфигурация HAProxy:
global
log 127.0.0.1 local0 debug
maxconn 4096
#debug
#quiet
user haproxy
group haproxy
defaults
log global
mode http
retries 3
timeout client 50s
timeout connect 5s
timeout server 50s
option dontlognull
option httplog
option redispatch
option logasap
option http-server-close
balance roundrobin
# Set up application listeners here.
listen admin
bind 0.0.0.0:22002
mode http
stats uri /
frontend http
maxconn 2000
bind 0.0.0.0:8080
default_backend servers-http
capture cookie SSNID len 63
backend servers-http
cookie SSNID insert nocache
server 03PM1 127.0.0.1:8081 cookie 03PM1 check
server 03PM2 127.0.0.1:8082 cookie 03PM2 check
Обратите внимание, я попробовал 1,5, чтобы увидеть, было ли это 1,4, но не в кости. Я также удалил stunnel впереди, чтобы увидеть, возможно ли что-то с SSL. Теперь пора погрузиться в источник...
Спасибо.
РЕДАКТИРОВАТЬ: я немного покопался и обнаружил, что в исходном коде HAProxy есть строка кода, которая предотвращает внедрение файлов cookie сохранения в ответ HTTP для ответов с кодом состояния HTTP менее 200. Это проблема для WebSockets, поскольку типичным ответом сервера в HTTP-рукопожатии является «101 протокол переключения». Я отправил несколько вопросов на форум HAProxy здесь: http://marc.info/?l=haproxy&m=140853225609985&w=2
Я не верю, что это действительно ошибка, учитывая, что HTTP RFC указывает, что поля заголовка ответа 1xx являются необязательными. Но я думаю, что, возможно, потребуется обновление, учитывая недавнюю популярность WebSockets. В зависимости от ответа на форуме и если они дадут мне зеленый свет, я отправлю свои изменения в проект, после чего обновлю этот пост.
ОБНОВЛЕНИЕ: я отправил некоторые изменения мастеру HAProxy 1.6, и они должны быть внесены в ближайшее время. Владелец проекта (Вилли) добавил несколько изменений к моему исходному изменению, и я протестировал их в своей среде. Если изменения в 1.6 окажутся полезными и не вызовут никаких проблем, насколько я понимаю, они будут возвращены к версиям 1.5 и, возможно, 1.4. Вы можете увидеть обмен электронной почтой здесь: http://marc.info/?l=haproxy&m=141080115708515&w =2а>