• haproxy代理https配置方法【转】


    记得在之前的一篇文章中介绍了nginx反向代理https的方法,今天这里介绍下haproxy代理https的方法:

    haproxy代理https有两种方式:
    1)haproxy服务器本身提供ssl证书,后面的web服务器走正常的http
    2)haproxy服务器本身只提供代理,后面的web服务器走https(配置ssl证书)


    第一种方式:haproxy服务器本身提供ssl证书

    注意:
    需要编译haproxy的时候支持ssl
    编译参数:
    #make TARGET=linux26 USE_OPENSSL=1 ADDLIB=-lz
    #ldd haproxy | grep ssl
    libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fb0485e5000)

    配置参数(修改haproxy.cfg文件)

    frontend https_frontend
       bind *:443 ssl crt /etc/ssl/certs/servername.pem
       mode http
       option httpclose
       option forwardfor
       reqadd X-Forwarded-Proto: https
       default_backend web_server

    backend web_server
      mode http
      balance roundrobin
      cookie SERVERID insert indirect nocache
      server s1 192.168.1.150:80 check cookie s1
      server s2 192.168.1.151:80 check cookie s2

    -----------------------------------------------------------
    注意:这里的pem 文件是下面两个文件合并而成:
    #cat servername.crt servername.key |tee servername.pem
    -----------------------------------------------------------

    第二种方式:haproxy服务器本身只提供代理,没有ssl证书 (一般我们常用的就是这种方式)

    这种方式,haproxy不需要重新编译支持ssl,简单方便,只需要后面的web服务器配置好ssl即可。

    配置参数(修改haproxy.cfg文件)


    frontend https_frontend
      bind *:443
      mode tcp
      default_backend web_server

    backend web_server
      mode tcp
    balance roundrobin
      stick-table type ip size 200k expire 30m
      stick on src
      server s1 192.168.1.150:443
      server s2 192.168.1.151:443

    ---------------------------------------------------------
    注意,这种模式下mode 必须是tcp 模式
    ---------------------------------------------------------

    本文由ilanniweb提供友情赞助,首发于烂泥行天下

    想要获得更多的文章,可以关注我的微信ilanniweb。

    在前一段时间,我写了几篇有关学习haproxy的文章。今天我们再来介绍下haproxy的https配置,https协议的好处在此,我们就不就作介绍了。

    我们只介绍如何配置https,以及https在实际生产环境中的应用。

    PS:本实验全部在haproxy1.5.4版本进行测试通过。haproxy1.3版本以下haproxy配置参数可能不能使用,需要注意版本号。

    以下haproxy配置是线上生产环境直接使用的。

    一、业务要求

    现在根据业务的实际需要,有以下几种不同的需求。如下:

    1.1 http跳转https

    把所有请求http://http.ilanni.com的地址全部跳转为https//:http.ilanni.com这个地址。

    1.2 http与https并存

    服务器同时开放http://http.ilanni.com和https://http.ilanni.com的访问形式。

    1.3 同台服务器不同域名之间的https与http

    同一台服务器对http.ilanni.com域名访问的全部跳转为https://http.ilanni.com,而对haproxy.ilanni.com访问走http协议,也就是跳转到http://haproxy.ilanni.com这个地址。

    1.4 同台服务器多域名均使用https

    同一台服务器对http.ilanni.com和haproxy.ilanni.com访问走http是协议。

    二、配置haproxy并测试业务需求

    现在我们根据业务的需求,我们来配置haproxy一一达到其需求。

    2.1 http跳转https配置

    说实话haproxy的https配置要比nginx配置简单的多了,我们只需要加入几行代码即可实现https的功能。

    http跳转https的haproxy配置文件内容,如下:

    global

    log 127.0.0.1 local0

    log 127.0.0.1 local1 notice

    maxconn 4096

    uid 188

    gid 188

    daemon

    tune.ssl.default-dh-param 2048

    defaults

    log global

    mode http

    option httplog

    option dontlognull

    option http-server-close

    option forwardfor except 127.0.0.1

    option redispatch

    retries 3

    option redispatch

    maxconn 2000

    timeout http-request 10s

    timeout queue 1m

    timeout connect 10s

    timeout client 1m

    timeout server 1m

    timeout http-keep-alive 10s

    timeout check 10s

    maxconn 3000

    listen admin_stats

    bind 0.0.0.0:1080

    mode http

    option httplog

    maxconn 10

    stats refresh 30s

    stats uri /stats

    stats auth admin:admin

    stats hide-version

    frontend weblb

    bind *:80

    acl is_http hdr_beg(host) http.ilanni.com

    redirect scheme https if !{ ssl_fc }

    bind *:443 ssl crt /etc/haproxy/ilanni.com.pem

    use_backend httpserver if is_http

    backend httpserver

    balance source

    server web1 127.0.0.1:7070 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    clip_image001[4]

    在以上配置文件中,需要注意的选项如下:

    tune.ssl.default-dh-param 2048因为我们的SSL密钥使用的是2048bit加密,所以在此进行声明。

    acl is_http hdr_beg(host) http.ilanni.com

    redirect scheme https if !{ ssl_fc }

    bind *:443 ssl crt /etc/haproxy/ilanni.com.pem

    这三行表示把所有访问http.ilanni.com这个域名的请求,全部转发到https://http.ilanni.com这个连接。

    2.2 测试http跳转https

    http跳转https配置完毕后,我们选择来测试其跳转。如下:

    clip_image002[10]

    你会发现在浏览器中,无论你输入的是http.ilanni.com,还是http://http.ilanni.com亦或是https://http.ilanni.com,都会自动跳转到https://http.ilanni.com。

    这样就达到了,把所有的http请求跳转到https的目的。

    2.3 http与https并存配置

    haproxy要实现http和https并存的话,配置也很简单,只需要把haproxy分别监控不同的端口就行,配置文件如下:

    global

    log 127.0.0.1 local0

    log 127.0.0.1 local1 notice

    maxconn 4096

    user haproxy

    group haproxy

    daemon

    tune.ssl.default-dh-param 2048

    defaults

    log global

    mode http

    option httplog

    option dontlognull

    retries 3

    option redispatch

    maxconn 2000

    timeout connect 5000ms

    timeout client 50000ms

    timeout server 50000ms

    listen admin_stats

    bind 0.0.0.0:1080

    mode http

    option httplog

    maxconn 10

    stats refresh 30s

    stats uri /stats

    stats auth admin:admin

    stats hide-version

    frontend weblb

    bind *:80

    acl is_http hdr_beg(host) http.ilanni.com

    use_backend httpserver if is_http

    backend httpserver

    balance source

    server web1 127.0.0.1:7070 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    frontend weblb443

    bind *:443 ssl crt /etc/haproxy/ilanni.com.pem

    acl is_443 hdr_beg(host) http.ilanni.com

    use_backend httpserver443 if is_443

    backend httpserver443

    balance source

    server web1 127.0.0.1:7070 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    在以上配置文件中,我们定义了两个前端,一个前端用于监听80端口,也就是http协议。另外一个前端监听443端口,也就是https协议。

    此时haproxy会根据客户端请求的协议进行分发,如果发现客户端请求的是http协议,则把该请求分发到监听80端口的前端。如果发现客户端请求的是https协议,则把该请求分发到监听443端口的前端。如此就达到了haproxy让http和https并存的要求。

    2.4 测试http与https并存

    http与https并存配置完毕后,我们选择来测试其跳转。如下:

    clip_image003[4]

    clip_image002[11]

    通过测试你会发现,在浏览器中如果你输入的是http://http.ilanni.com或者是http.ilanni.com都会直接跳转到http://http.ilanni.com,而输入的是https://http.ilanni.com,则只会跳转到https://http.ilanni.com。

    如此就到达了,我们业务的要求实现http和https并存。

    2.5 同台服务器不同域名之间的https与http配置

    同台服务器不同域名之间的http和https配置比较复杂,第一需要监听两个端口,第二还要根据不同的域名进行分发。

    haproxy配置文件如下:

    global

    log 127.0.0.1 local0

    log 127.0.0.1 local1 notice

    maxconn 4096

    uid 188

    gid 188

    daemon

    tune.ssl.default-dh-param 2048

    defaults

    log global

    mode http

    option httplog

    option dontlognull

    option http-server-close

    option forwardfor except 127.0.0.1

    option redispatch

    retries 3

    option redispatch

    maxconn 2000

    timeout http-request 10s

    timeout queue 1m

    timeout connect 10s

    timeout client 1m

    timeout server 1m

    timeout http-keep-alive 10s

    timeout check 10s

    maxconn 3000

    listen admin_stats

    bind 0.0.0.0:1080

    mode http

    option httplog

    maxconn 10

    stats refresh 30s

    stats uri /stats

    stats auth admin:admin

    stats hide-version

    frontend weblb

    bind *:80

    acl is_haproxy hdr_beg(host) haproxy.ilanni.com

    acl is_http hdr_beg(host) http.ilanni.com

    redirect prefix https://http.ilanni.com if is_http

    use_backend haproxyserver if is_haproxy

    backend haproxyserver

    balance source

    server web1 127.0.0.1:9090 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    frontend weblb443

    bind *:443 ssl crt /etc/haproxy/ilanni.com.pem

    acl is_443 hdr_beg(host) http.ilanni.com

    use_backend httpserver443 if is_443

    backend httpserver443

    balance source

    server web1 127.0.0.1:7070 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    clip_image004[4]

    同台服务器不同域名之间的https与http配置,我们配置了两个前端一个用于监听80端口,并且根据不同的域名进行跳转。在80端口的规则中,如果客户端请求的是http.ilanni.com,这个域名的话,则haproxy会把该请求直接跳转到https://http.ilanni.com。如果是haproxy.ilanni.com,这个域名的话,则分发到后端的服务器。

    另外一个前端用于监听443端口,用于分发客户端https://http.ilanni.com的请求。

    2.6 测试同台服务器不同域名之间的https与http配置

    同台服务器不同域名之间的https与http配置配置完毕后,我们现在来进行测试。如下:

    clip_image005[4]

    clip_image002[12]

    通过上图,我们可以发现在浏览器中输入haproxy.ilanni.com会跳转到http://haproxy.ilanni.com这个地址,而如果输入的是http.ilanni.com或者是http://http.ilanni.com,亦或是https://http.ilanni.com的话,都会跳转到https://http.ilanni.com。

    如此就达到了我们的业务要求,同台服务器上访问haproxy.ilanni.com直接跳转到80端口,如果访问的是http.ilanni.com域名的话则跳转到https://http.ilanni.com这个地址。

    2.7 同台服务器多域名均使用https配置

    要使同台服务器的两个设置多个域名都使用https协议的话,配置很简单。只需要在haproxy中启用各自的https配置即可。

    haproxy配置文件,如下:

    global

    log 127.0.0.1 local0

    log 127.0.0.1 local1 notice

    maxconn 4096

    uid 108

    gid 116

    daemon

    tune.ssl.default-dh-param 2048

    defaults

    log global

    mode http

    option httplog

    option dontlognull

    option http-server-close

    option forwardfor except 127.0.0.1

    option redispatch

    retries 3

    option redispatch

    timeout http-request 10s

    timeout queue 1m

    timeout connect 10s

    timeout client 1m

    timeout server 1m

    timeout http-keep-alive 10s

    timeout check 10s

    maxconn 3000

    listen admin_stats

    bind 0.0.0.0:1080

    mode http

    option httplog

    maxconn 10

    stats refresh 30s

    stats uri /stats

    stats auth admin:admin

    stats hide-version

    frontend web80

    bind *:80

    acl is_http hdr_beg(host) http.ilanni.com

    redirect scheme https if !{ ssl_fc }

    bind *:443 ssl crt /etc/haproxy/ilanni.com.pem

    acl is_haproxy hdr_beg(host) haproxy.ilanni.com

    redirect scheme https if !{ ssl_fc }

    bind *:443 ssl crt /etc/haproxy/ilanni.com.pem

    use_backend httpserver if is_http

    use_backend haproxyserver if is_haproxy

    backend httpserver

    balance source

    server web1 127.0.0.1:6060 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    backend haproxyserver

    balance source

    server web1 127.0.0.1:9090 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

    clip_image006[4]

    配置文件比较简单,在此就不做进一步的讲解了。

    2.8 测试同台服务器多域名均使用https

    同台服务器多域名均使用https,配置完毕后,现在我们来测试下。

    clip_image002[13]

    clip_image007[4]

    通过上图,我们可以看到在浏览中无论是输入http.ilanni.com、http://http.ilanni.com,还是haproxy.ilanni.com、http://haproxy.ilanni.com,都会跳转到相应的https地址。

    这也达到了我们业务的要求

    转自

    haproxy代理https配置方法 http://www.mamicode.com/info-detail-1539510.html

    烂泥:haproxy学习之https配置 http://www.cnblogs.com/ilanni/p/4941056.html

  • 相关阅读:
    day7
    11.3NOIP模拟赛
    codeforces 880E. Maximum Subsequence(折半搜索+双指针)
    11.2NOIP模拟赛
    bzoj1483: [HNOI2009]梦幻布丁(vector+启发式合并)
    day9
    codeforces 1006 F(折半搜索)
    codeforces 28D(dp)
    P2210 Haywire(A*)
    4800: [Ceoi2015]Ice Hockey World Championship(折半搜索)
  • 原文地址:https://www.cnblogs.com/paul8339/p/8042776.html
Copyright © 2020-2023  润新知