HAProxy SSL Redirect для HTTP, но не для WebSockets
У меня есть HAProxy в качестве балансировщика нагрузки и динамического перенаправления на мой веб-сервер и сервер веб-сокетов, чтобы они могли работать через один и тот же порт. Мой сервер веб-сокетов требует SSL-проверки на прокси-сервере.
Я хочу настроить HAProxy таким образом, чтобы трафик http перенаправлялся на https, но веб-сокеты работают на бот-портах 80 и 443 (ws и wss). Это возможно?
Мой текущий конфиг:
global
maxconn 50000
user root
group root
stats socket /tmp/haproxy
node lb1
nbproc 1
#daemon
#debug
defaults
log global
retries 3
option dontlog-normal
timeout connect 10000ms
timeout client 10000ms
timeout server 10000ms
timeout tunnel 24h
maxconn 50000
mode http
option http-server-close
backend wwwServers
mode http
balance roundrobin
option httpchk HEAD / HTTP/1.1
server www1 127.0.0.1:1138 check
backend wsServers
server ws1 127.0.0.1:1137 check
frontend secured
bind :443 ssl crt /cert/cert.pem
reqadd X-Forwarded-Proto:\ https
default_backend wwwServers
frontend unsecured
bind :80
acl is_websocket hdr(Upgrade) -i WebSocket
use_backend wsServers if is_websocket
redirect scheme https if !{ ssl_fc }
default_backend wwwServers
но это перенаправляет соединение websocket перед обновлением, потому что прокси-сервер делает следующее, когда я его запускаю: правило 'redirect', помещенное после правила 'use_backend', все равно будет обрабатываться раньше.
Любая помощь будет оценена.
Спасибо,
1 ответ
Решение было следующим:
frontend secured
bind :443 ssl crt /path/to/certificate.pem
reqadd X-Forwarded-Proto:\ https
acl is_websocket hdr(Upgrade) -i WebSocket
use_backend wsServers if is_websocket
default_backend wwwServers
frontend unsecured
bind :81,:80
acl is_websocket hdr(Upgrade) -i WebSocket
redirect scheme https if !{ ssl_fc } !is_websocket
use_backend wsServers if is_websocket
default_backend wwwServers
если установлено соединение не через ssl, а через websocket, оно перенаправляется.