HAProxy 重定向

HAProxy 重定向

如果请求的 URI 不是 www 或非 https,我尝试让 HAProxy 重定向到正确的 URI。我遇到的问题是,它一碰到一行就会重定向,导致多次重定向。

这是我的配置:

*snip*

frontend traffic-in
    bind *:80
    bind *:443 ssl crt /etc/haproxy/certificate.bundled.pem
    reqrep ^(.*)[^/]$ \1/
    redirect prefix https://www.example.com 301 if { hdr(host) -i beste.nl } 
    redirect scheme https code 301 if !{ ssl_fc }

*snip*

如果我去http://example.com,它会首先将我重定向到http://example.com/, 其次是https://www.example.com

我希望它重定向我一次,而不是多次,因为这会损害我们的 Google 排名。

如何将请求重定向到带有尾部斜杠和 ssl 的 URI?

答案1

如果你分离出一个 http 前端它可能会简化事情

frontend http_in
  bind *:80
  redirect prefix https://www.example.com code 301

frontend https_in
  all www.example.com hdr_sub(host) www.example.com
  bind *:443 ssl crt /etc/haproxy/certificate.bundled.pem
  redirect prefix https://www.example.com code 301 if !www.example.com
  ...

答案2

您需要 3 个前端定义,如下所示:

frontend http
    bind *:80
    redirect scheme https code 301 if !{ ssl_fc }

frontend https
    bind *:443 ssl crt /etc/haproxy/certificate.bundled.pem
    #-------------------------
    # todo: use backends here
    #-------------------------

frontend www
    bind *:80
    acl has_www hdr_beg(host) -i www.
    http-request add-header X-Host-Redirect yes if !has_www
    redirect code 301 prefix //www.example.com if !has_www

结果: http://example.com >> https://www.example.com

相关内容