haproxy中同一端口上的HTTPS和HTTP

时间:2018-11-10 15:28:56

标签: https haproxy

我有一台在haproxy后面带有Rest API的服务器,该服务器监听端口5000。haproxy配置将端口5000配置为接受来自客户端的HTTPS连接,然后将消息转发到服务器。这可以正常工作,这是该端口的配置:

frontend service-front-1
    bind 192.168.122.3:5000 ssl crt /etc/ssl/private/haproxy.pem ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
    option httplog
    option forwardfor except 127.0.0.0/8
    option http-server-close
    reqadd X-Forwarded-Proto:\ https
    mode http
    default_backend service-back

backend service-back
    mode http
    balance leastconn
    stick store-request src
    stick-table type ip size 256k expire 30m
    option forwardfor
    option httplog
    option httpchk HEAD / HTTP/1.0\r\nUser-agent:\ osa-haproxy-healthcheck

server controller00_container-442ea37a 172.29.237.76:5000 check port 5000 inter 12000 rise 1 fall 1

在客户端,我现在有一个无法执行HTTPS并需要连接到服务器的应用程序。它尝试使用HTTP到端口5000,但是由于haproxy期望该端口使用HTTPS,所以事情失败了,我得到了:

  

无法建立连接(“连接已中止。,BadStatusLine(“''”,))

不幸的是,我无法删除端口5000的HTTPS功能,因为某些应用程序期望这样做。那么,我可以在端口5000上同时具有两种功能(HTTPS和HTTP)吗?我尝试通过使用此配置添加另一个前端:

frontend service-front-2
    bind 192.168.122.3:5000
    option httplog
    option forwardfor except 127.0.0.0/8
    option http-server-close
    mode http
    default_backend service-back

结果是有时它可以工作。在我看来,haproxy会随机选择定义端口5000的两个前端之一,如果它是客户端期望工作的端口

0 个答案:

没有答案