我很难让HAProxy与RabbitMQ的Web (通过Web的MQTT )一起工作。我尝试了一些配置和教程,但没有成功(哈代博客、BartKrol Github、[医]乌塞克·德氏巨兽)。也尝试过设置HAProxy和带有代理协议的RabbitMQ,但没有成功。
我真的很想在这个问题上使用HAProxy,但是我很难使用它。
我的意图是使用浏览器中的Javascript Paho MQTT客户端连接到RabbitMQ网络套接字MQTT代理,其中HAProxy将使用所提供的TLS/SSL证书加密http/ws连接(也称为SSL/TLS卸载)。
当试图使用HAProxy打开安全的websocket连接时,浏览器将获得一个HTTP1.1 503服务不可用响应
RabbitMQ服务器正在本地主机上侦听未加密的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.mydomain.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呢?
设置:
这是在Firefox中使用Paho MQTT lib进行安全websocket连接尝试之后的响应:
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.发布于 2020-05-06 06:31:43
也有类似的问题。告诉你你做错了什么,我不太熟悉。但是我可以和你分享我的配置。后端be_mqtt_www从未被使用过,所以可能没有必要使用它。
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base <path_to_certs>
crt-base <path_to_certs>
# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
option httplog
option dontlognull
option redispatch
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
# proxy for ui
frontend ft_rabbitmq_https
bind *:443 ssl crt <path_to_cert>
mode http
option httpclose
option forwardfor
option httpchk
default_backend bk_rabbitmq_ui
backend bk_rabbitmq_ui
server localhost 127.0.0.1:15672 check
# proxy for mqtt-tls
listen mqtt
bind *:8883 ssl crt <path_to_cert>
mode tcp
option clitcpka
timeout client 3h
timeout server 3h
option tcplog
server localhost 127.0.0.1:1883 check
#proxy for tls-websockets
frontend fe_mqtt_wss
bind *:9001 ssl crt <path_to_cert>
mode http
option http-server-close
acl is_websocket hdr(Upgrade) -i WebSocket
use_backend be_mqtt_ws if is_websocket
default_backend be_mqtt_www
backend be_mqtt_ws
timeout server 600s
server localhost 127.0.0.1:15675/ws check
backend be_mqtt_www
timeout server 600s
server localhost 127.0.0.1:15675 checkhttps://stackoverflow.com/questions/60895671
复制相似问题