HAProxy的HTTP重定向到HTTPS(SSL)(HAProxy redirecting htt

2019-07-03 13:29发布

我使用HAProxy的负载均衡和只希望我的网站支持https。 因此,我想在端口80上的所有请求重定向到443端口。

我会怎么做呢?

编辑:我们想重定向到相同的URL使用HTTPS,但保留查询参数。 因此, http://foo.com/bar会重定向到https://foo.com/bar

Answer 1:

我觉得这是最大的帮助 :

使用HAProxy的1.5 dev13或更高版本,并简单地将下面的行添加到前端配置:

redirect scheme https code 301 if !{ ssl_fc }


Answer 2:

我没有足够的声誉在前面的回答发表评论,所以我发布一个新的答案,以补充周杰伦泰勒的回答。 基本上,他的回答会做重定向,隐式的重定向虽然,这意味着它会发出302(临时重定向),但由于问题通知,整个网站将担任HTTPS,然后将相应的重定向应该是301(永久重定向)。

redirect scheme https code 301 if !{ ssl_fc }

这似乎是一个小的变化,但根据该网站上,有一个永久重定向,我们通知浏览器,它应该不再找HTTP版本从一开始(避免将来重定向)的影响可能是巨大的 - 对于HTTPS一个节省时间站点。 它还有助于搜索引擎优化,而不是将你的链接汁。



Answer 3:

所有流量重新导向:

redirect scheme https if !{ ssl_fc }

要重定向单个URL(在多个前/后端的情况下)

redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }



Answer 4:

据http://parsnips.net/haproxy-http-to-https-redirect/它应该是作为配置您的haproxy.cfg包含后续的那样容易。

#---------------------------------------------------------------------
# Redirect to secured
#---------------------------------------------------------------------
frontend unsecured *:80
    redirect location https://foo.bar.com

#---------------------------------------------------------------------
# frontend secured
#---------------------------------------------------------------------
frontend  secured *:443
   mode  tcp
   default_backend      app

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    mode  tcp
    balance roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check


Answer 5:

最好的方式保证一切HTTP重定向到HTTPS是:

frontend http-in
   bind *:80
   mode http
   redirect scheme https code 301

这是使用“代码301“有点票友,但还不如让客户知道这是永久性的。 该“模式HTTP”部分不使用缺省配置必要的,但不能伤害。 如果你有mode tcp的默认值部分(像我一样),那么它的必要。



Answer 6:

user2966600的解决方案的细微变化......

重定向所有单个URL(在多个前/后端的情况下):

redirect scheme https if !{ hdr(Host) -i www.mydomain.com } !{ ssl_fc }


Answer 7:

就像周杰伦泰勒说,HAProxy的1.5-dev的具有redirect scheme配置指令,它完成你所需要的东西。

但是,如果您不能使用1.5,如果你是弥补从源代码编译HAProxy的,我向后移植的redirect scheme功能,因此它在1.4。 你可以在这里得到补丁: http://marc.info/?l=haproxy&m=138456233430692&w=2



Answer 8:

frontend unsecured *:80
    mode http
    redirect location https://foo.bar.com


Answer 9:

如果你想重写网址,你必须改变你的网站的虚拟主机添加此行:

### Enabling mod_rewrite
Options FollowSymLinks
RewriteEngine on

### Rewrite http:// => https://
RewriteCond %{SERVER_PORT} 80$
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,NC,L]

但是,如果你想在80端口上的所有请求重定向到背后的代理Web服务器的443端口,你可以尝试在你的haproxy.cfg这个例子的conf:

##########
# Global #
##########
global
    maxconn 100
    spread-checks 50
    daemon
    nbproc 4

############
# Defaults #
############
defaults
    maxconn 100
    log global
    mode http
    option dontlognull
    retries 3
    contimeout 60000
    clitimeout 60000
    srvtimeout 60000

#####################
# Frontend: HTTP-IN #
#####################
frontend http-in
    bind *:80
    option logasap
    option httplog
    option httpclose
    log global
    default_backend sslwebserver

#########################
# Backend: SSLWEBSERVER #
#########################
backend sslwebserver
    option httplog
    option forwardfor
    option abortonclose
    log global
    balance roundrobin
    # Server List
    server sslws01 webserver01:443 check
    server sslws02 webserver02:443 check
    server sslws03 webserver03:443 check

我希望这可以帮助您



Answer 10:

你为什么不使用ACL的区别流量? 在我的头顶:

acl go_sslwebserver path bar
use_backend sslwebserver if go_sslwebserver

这又在什么马修·布朗回答上面。

见哈文档 ,搜索之类的东西hdr_dom和下方找到更多的ACL选项。 有很多的选择。



Answer 11:

这种添加到HAProxy的前端配置:

acl http      ssl_fc,not
http-request redirect scheme https if http

HAProxy的-重定向HTTP请求



文章来源: HAProxy redirecting http to https (ssl)