通过HAProxy强制重定向到HTTPS查询参数

时间:2013-04-17 12:44:15

标签: apache https apache2 haproxy url-redirection

我正在使用HaProxy来加载平衡传入请求并执行基于子域的重定向。现在我想用查询参数强制地使所有传入请求HTTPS。

例如: -

http://foo.test.com/test_page?person_name= “布拉”

应该重定向到: -

https://foo.test.com/test_page?person_name= “布拉”

我知道我可以使用Apache进行这种重定向: -

   RewriteEngine On
   # This will enable the Rewrite capabilities
   RewriteCond %{HTTPS} !=on
   # This checks to make sure the connection is not already HTTPS
   #RewriteRule ^/?(.*) HTTPS_REDIRECTION_LOGIC{SERVER_NAME}/$1 [R,L]

或者我可以使用apache侦听端口80进行此类重定向,并使重定向的HA-Proxy在prt 443上侦听重定向请求,这两个请求都在同一个盒子上运行吗?我尝试了这种方法但是每当Apache启动它时都会绑定端口80和443.

2 个答案:

答案 0 :(得分:0)

加入你的vhost:

UseCanonicalName on
UseCanonicalPhysicalPort On

使用SERVER_PORT代替HTTPS 例如:

RewriteEngine On
   # This will enable the Rewrite capabilities
   RewriteCond %{SERVER_PORT} !=443
   # This checks to make sure the connection is not already HTTPS
   #RewriteRule ^/?(.*) HTTPS_REDIRECTION_LOGIC{SERVER_NAME}/$1 [R,L]

OR

您可以使用域名重定向

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(www.)?example.com$
    RewriteRule ^(.*)$ https://example.com/$ [R=302,L]

答案 1 :(得分:0)

您必须使用haproxy版本1.5.x(截至2014年6月,它已宣布为稳定版)。 你的haproxy.cfg中的一个简单的代码片段应该为你排序:



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

frontend https-in
        bind *:443
        <other configuration>
&#13;
&#13;
&#13;

欢呼:)