Я изо всех сил пытаюсь заставить HAProxy работать с Web MQTT RabbitMQ (MQTT через Web Socket). Я пробовал некоторые конфигурации и учебные пособия, но безуспешно ( haproxy blog , BartKrol Github , s0urcec0de's Github ). Также попытался установить HAProxy и RabbitMQ с прокси-протоколом , но безуспешно.
Я действительно хочу использовать HAProxy на этом, но мне трудно с этим.
Я намерен использовать клиент Javascript Paho MQTT в браузере для подключения к брокеру RabbitMQ Web Socket MQTT, и между ними HAProxy будет шифровать соединения http / ws с предоставленными сертификатами TLS / SSL (также называемые разгрузкой SSL / TLS).
При попытке открыть защищенное соединение веб-сокета с помощью HAProxy браузер получает ответ HTTP / 1.1 503 Service Unavailable
Сервер RabbitMQ прослушивает незашифрованные соединения msott websocket на локальном хосте: 15675
HAProxy прослушивает ws.mydomain.io:3001
Это конфигурация HAProxy:
global
log 127.0.0.1 local0
defaults
log global
option httplog
timeout client 5000s
timeout connect 5000s
timeout queue 5000s
timeout server 5000s
frontend https
bind *:3001 ssl crt /usr/local/etc/haproxy/mydomain.io.pem
mode http
log global
backlog 4096
default_backend web_mqtt
backend web_mqtt
mode http
option forwardfor
server ws_01 localhost:15675
Я пытался добиться такой же конфигурации с Nginx , и это успешно работал (конфигурация основана на их официальной документации) .
Nginx слушает ws.mydomai n.io:3000
server {
listen 3000 ssl;
server_name ws.mydomain.io;
ssl_certificate /home/tiago/Keys/mydomain/nginx/mydomain.io.crt;
ssl_certificate_key /home/tiago/Keys/mydomain/nginx/mydomain.io.key;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://ws-backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
upstream ws-backend {
# enable sticky session based on IP
ip_hash;
server localhost:15675;
}
Конфигурация RabbitMQ (rabbitmq.conf):
log.connection.level = info
loopback_users.guest = false
listeners.tcp.default = 5672
# proxy_protocol = true
web_mqtt.tcp.port = 15675
Чего мне не хватает в конфигурации HAProxy?
Как можно Nginx запрос прокси и HAProxy нет?
Настройка:
- Debian 10 x64
- HAProxy 2.1.3
- Javascript Paho MQTT Клиент 1.1.0
- Nginx 1.14.2
- RabbitMQ 3.8.3
Это ответ после попытки безопасного соединения через веб-сокет с Paho MQTT lib в Firefox:
GET
https://ws.mydomain.io:3001/ws
[HTTP/1.1 503 Service Unavailable 3027ms]
Request URL:https://ws.mydomain.io:3001/ws
Request method:GET
Remote address:127.0.0.1:3001
Status code:
503
Version:HTTP/1.1
Response headers (126 B)
Raw headers
cache-control
no-cache
connection
close
content-length
107
content-type
text/html
Request headers (484 B)
Raw headers
Accept
*/*
Accept-Encoding
gzip, deflate, br
Accept-Language
en-US,en;q=0.5
Cache-Control
no-cache
Connection
keep-alive, Upgrade
Host
ws.mydomain.io:3001
Origin
http://localhost:8123
Pragma
no-cache
Sec-WebSocket-Extensions
permessage-deflate
Sec-WebSocket-Key
XXXXXXXXXXXXXXXX==
Sec-WebSocket-Protocol
mqtt
Sec-WebSocket-Version
13
Upgrade
websocket
User-Agent
Mozilla/5.0 (X11; Linux x86_64…) Gecko/20100101 Firefox/68.0
Это firefox сообщение:
Firefox can’t establish a connection to the server at wss://ws.mydomain.io:3001/ws.