首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在的web中使用HAProxy并添加SSL/TLS?

问如何在的web中使用HAProxy并添加SSL/TLS?
EN

Stack Overflow用户
提问于 2020-03-27 23:54:07
回答 1查看 3.6K关注 0票数 1

我很难让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配置:

代码语言:javascript
复制
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收听

代码语言:javascript
复制
  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):

代码语言:javascript
复制
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

这是在Firefox中使用Paho MQTT lib进行安全websocket连接尝试之后的响应:

代码语言:javascript
复制
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消息:

代码语言:javascript
复制
Firefox can’t establish a connection to the server at wss://ws.mydomain.io:3001/ws.
EN

回答 1

Stack Overflow用户

发布于 2020-05-06 06:31:43

也有类似的问题。告诉你你做错了什么,我不太熟悉。但是我可以和你分享我的配置。后端be_mqtt_www从未被使用过,所以可能没有必要使用它。

代码语言:javascript
复制
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 check
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60895671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档