我正在使用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.
答案 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;
欢呼:)