HAproxy ssl 重新加密和 http 头修改

HAproxy ssl 重新加密和 http 头修改

我想在我的 https 服务器之前使用 Haproxy 1.6.5 作为 Https 负载均衡器,但我遇到了一个误解的问题。

我想要这种行为:haproxy 可用作https://example.com但是在它后面有几个带有自签名证书的 https 服务器,我无法切换到 http。

因此我为此配置了我的 tcp 前端

frontend tcp_in
       mode tcp
       option tcplog
       bind *:443 ssl crt /etc/ssl/certs/server.bundle.pem
       maxconn 50000

   tcp-request inspect-delay 5s
   tcp-request content accept if { req.ssl_hello_type 1 }

   acl example_acl req.ssl_sni -i example.com
   use_backend special_example if example_acl

在此之后,我想将我的流量发送到其中一个后端,但重点是我想从后端 1 请求类似 https:\eimA.customer.local 的内容,从后端 2 请求 https:\eimB.customer.local 的内容。我猜我需要在请求中重写主机标头。(可能在 tcp 模式下不起作用。那么我该如何修改配置来做到这一点?)

我的后端配置是:

backend special_eims
        mode tcp
        option tcplog
        balance roundrobin
        stick-table type binary len 32 size 30k expire 30m
        acl clienthello req_ssl_hello_type 1
        acl serverhello rep_ssl_hello_type 2
        tcp-request inspect-delay 5s
        tcp-request content accept if clienthello
        tcp-response content accept if serverhello


        server eim1 eimA.customer.local:443 check
        server eim2 eimA.customer.local:443 check


        stick on payload_lv(43,1) if clienthello
        stick store-response payload_lv(43,1) if serverhello

由于我的配置,我在浏览器中收到 SSL 连接错误,并且

curl -v https://example.com/default -k
* About to connect() to example.com port 443 (#0)
*   Trying 127.0.0.1... connected
* Connected to example.com (127.0.0.1) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* NSS error -12263
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error

直接连接到后端服务器https://ip 地址/默认返回 404 错误,因此只有https://eimA.customer.local/default格式是允许的。

请帮忙,如果问题比较蠢,请见谅。

答案1

我花了一段时间才解决这个问题。1. 我从 tcp 模式切换到 http 模式,因为在 tcp 模式下你无法获取 http 标头信息。2. 在服务器语句中使用真实域名,并使用http-send-name-header Host基本上将主机标头设置为指令后的名称server3. 对于重新加密模式,前端证书是强制性的。

    frontend CUIC_frontend
           mode http
           bind *:443 ssl crt  /etc/ssl/certs/ssl-cert.pem
           option forwardfor
           option http-server-close
           reqadd X-Forwarded-Proto:\ https
    default_backend App_Backend
....
backend App_Backend
        mode http
        balance roundrobin
        http-send-name-header Host
        server full-application1-domain-name  10.10.10.1:443 cookie app1 check ssl verify none 
        server full-application2-domain-name 10.10.10.2:443 cookie app2 check ssl verify none 

相关内容