在 haproxy 上使用 ssl 将非 www 重定向到 www

在 haproxy 上使用 ssl 将非 www 重定向到 www

我想要实现的是重定向:

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.comhttp://test.com 不要重定向到 https://www.test.com

我是否需要 SSL 证书https://test.com? 如果是,我该如何将其添加到 haproxy conf 中?

答案1

您在那里使用的命令redirect只是从 重定向httphttps- 它不会操作 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

相关内容