Haproxy

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

  • May 18, 2020

我想要實現的是重定向:

http://test.com --> https://www.test.com
http://www.test.com/ -> https://www.test.com
https://test.com --> https://www.test.com

我目前的 haproxy conf:

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

我需要https://test.com的 ssl 證書嗎?如果是,如何將其添加到 haproxy conf 中?

您在那裡的redirect命令只是從httpto重定向https- 它不操縱 URL 的任何其他部分,因此您看到的行為是預期的。

對於 HTTP -> HTTPS 重定向,您可能希望使用:

http-request redirect prefix https://www.test.com if !{ ssl_fc }

這將導致所有重定向到目標https://www.test.com,無論來源如何。但它不會解決https://test.comtohttps://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

引用自:https://serverfault.com/questions/1017586