![Haproxy 使用相同的端口用于 http 和 https](https://linux22.com/image/754392/Haproxy%20%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%E7%AB%AF%E5%8F%A3%E7%94%A8%E4%BA%8E%20http%20%E5%92%8C%20https.png)
我希望我的 Web 应用程序仅在端口 4443 上运行。因此,我将这个端口添加到 haproxy 上的 docker 容器中。现在我想检查传入的请求,如果它不是 https,它应该重定向到它。例如:http:test.example.com:4443 -> https:test.example.com:4443。这仅在我绑定没有 SSL 证书的端口时才有效。
如果我像这样绑定它:bind *:4443 ssl crt /usr/local/etc/ssl/chaparron.ml.pem alpn h2 如果我调用 http:test.example.com:4443 但没有重定向,我会收到错误“https/1:SSL 握手失败”。
我怎样才能做到这一点?
这是我现在的 haproxy.cfg
global
maxconn 50
tune.ssl.default-dh-param 2048
log stdout format raw local0
defaults
log global
mode http
timeout tunnel 1h
timeout http-request 100s
frontend https
mode http
bind *:4443 ssl crt /usr/local/etc/ssl/nextcloud.ml.pem alpn h2
http-request redirect scheme https code 301 if !{ ssl_fc }
default_backend nextcloud
timeout client 30s
backend nextcloud
mode http
timeout connect 20s
option http-server-close
server app1 app:80
timeout server 30s
如果我直接使用 url 中的 https 调用它,它可以完美运行。