我有一台在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的两个前端之一,如果它是客户端期望工作的端口