我想要实现的是重定向:
http://test.com --> https://www.test.com
http://www.test.com/ -> https://www.test.com
https://test.com --> https://www.test.com
我当前的 haproxy 配置:
global
log 127.0.0.1 local0 notice
maxconn 3000
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
timeout connect 5000
timeout client 5000
timeout server 5000
frontend http-in
bind *:80
bind *:443 ssl crt /etc/letsencrypt/live/www.test.com/www.test.com.pem
mode http
http-request redirect prefix https://www.%[hdr(host)] code 301 if { hdr(host) -i test.com } /// THIS DOESN'T WORK
option forwardfor
redirect scheme https code 301 if !{ ssl_fc }
.
.
.
我的问题:
https://test.com和http://test.com 不要重定向到 https://www.test.com
我是否需要 SSL 证书https://test.com? 如果是,我该如何将其添加到 haproxy conf 中?
答案1
您在那里使用的命令redirect
只是从 重定向http
到https
- 它不会操作 URL 的任何其他部分,因此您看到的行为是预期的。
对于 HTTP -> HTTPS 重定向,您可能需要使用:
http-request redirect prefix https://www.test.com if !{ ssl_fc }
这将导致所有重定向到目标,https://www.test.com
无论来源如何。但这不会解决问题,https://test.com
因为https://www.test.com
条件 ( if !{ ssl_fc }
) 不匹配。
您可能可以使用 ACL 来添加所需的匹配,因此如下所示:
acl http ssl_fc,not
acl host_www hdr_beg(host) www.
http-request redirect prefix https://www.test.com if http or !host_www