设为首页 收藏本站
查看: 1159|回复: 0

[经验分享] 烂泥:haproxy学习之https配置

[复制链接]

尚未签到

发表于 2019-1-1 10:53:06 | 显示全部楼层 |阅读模式
  在前一段时间,我写了几篇有关学习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
  
  在以上配置文件中,需要注意的选项如下:
  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配置完毕后,我们选择来测试其跳转。如下:
  
  你会发现在浏览器中,无论你输入的是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并存配置完毕后,我们选择来测试其跳转。如下:
  
  
  通过测试你会发现,在浏览器中如果你输入的是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
  
  同台服务器不同域名之间的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配置配置完毕后,我们现在来进行测试。如下:
  
  
  通过上图,我们可以发现在浏览器中输入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
  
  配置文件比较简单,在此就不做进一步的讲解了。
  2.8 测试同台服务器多域名均使用https
  同台服务器多域名均使用https,配置完毕后,现在我们来测试下。
  
  
  通过上图,我们可以看到在浏览中无论是输入http.ilanni.com、http://http.ilanni.com,还是haproxy.ilanni.com、http://haproxy.ilanni.com,都会跳转到相应的https地址。
  这也达到了我们业务的要求。
  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658195-1-1.html 上篇帖子: haproxy varnish 下篇帖子: HAProxy配置使用说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表