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

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

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地址。

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

转自

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

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

haproxy代理https配置方法【转】相关推荐

  1. 【转】Nginx服务器的反向代理proxy_pass配置方法讲解

    [转]Nginx服务器的反向代理proxy_pass配置方法讲解 转自:http://www.jb51.net/article/78746.htm 就普通的反向代理来讲 Nginx的配置还是比较简单的 ...

  2. nginx 反向代理https配置

    配置nginx 反向代理https server {listen 443 ;#ssl http2 default_server;server_name xxxx.com;# access_log lo ...

  3. nginx 正向代理https配置

    1.需求描述 nginx正向代理 如图所示,公司内网为了安全考虑,只提供一台服务器可与外网作为网关,进行访问. 1.服务器A可以访问外网: 2.服务器B,C无法访问外网: 3.服务器ABC之间内网互通 ...

  4. nginx反向代理模块配置详解_Nginx服务器的反向代理proxy_pass配置方法讲解

    就普通的反向代理来讲 Nginx的配置还是比较简单的,如: location ~ /* { proxy_pass http://127.0.0.1:8008; } 或者可以 location / { ...

  5. squid代理服务之透明代理的配置方法

    本章目录 一:透明代理实验过程 1.1:环境 1.2 配置双网卡 1.3 client客户端修改 1.4:squid服务器配置 1.5:web端设置 1.6:再次使用client客户端访问web端 1 ...

  6. 网络代理的配置方法有哪些?各有哪些利弊呢?

    网络代理是一种通过中间服务器来转发网络请求和响应的方式,常用于访问海外学习的网站.保护隐私安全等目的.比较多的应用于公司内网建设,以及外贸,出海互联网公司行业. 下面介绍几种常见的代理方式及其利弊. ...

  7. ha 配置ssl_烂泥:haproxy学习之https配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 在前一段时间,我写了几篇有关学习haproxy的文章.今天我们再来介绍下haproxy ...

  8. 用 Keepalived+HAProxy 实现高可用负载均衡的配置方法

    1. 概述 软件负载均衡技术是指可以为多个后端服务器节点提供前端IP流量分发调度服务的软件技术.Keepalived和HAProxy是众多软负载技术中的两种,其中Keepalived既可以实现负载均衡 ...

  9. Haproxy 透传IP配置方法及测试

    Haproxy 透传IP配置方法 1. 环境准备 2. 测试准备 2.1 启动Haproxy容器方法 2.1.1 拉取官方haproxy镜像 2.1.2 删除旧的容器 2.1.3 编写haproxy配 ...

最新文章

  1. 探索自动驾驶领域中的3D多目标跟踪(ICCV 2021)
  2. 自动 更新SVN目录文件.bat
  3. 产品属性对风险定价有什么影响?
  4. 舍选法抽样matlab,舍选抽样法.PPT
  5. 在centos6.5中安装github的客户端git
  6. 十大经典算法总结(JavaScript描述)
  7. 牛B装备 XSS 漏洞利用工具[使用教程]
  8. python windows ui自动化_pywinauto处理UI自动化
  9. 前端工程师如何与设计师合作
  10. 用 JAVA 开发游戏连连看(之二)实现游戏的算法
  11. 【计算机网络】TCP糊涂窗口综合症
  12. 蓝牙连接测试系统软件,蓝牙测试软件官方版
  13. c++字符、字符串详解
  14. win10开机系统恢复(WinRE)中找不到系统恢复映像或功能不全的解决方法
  15. 高档微型计算机,五款中高端声卡综合横向评测
  16. SG函数和SG定理的运用
  17. 神经网络图像细节分析,神经网络 图像相似度
  18. 扎实走来的2D网游与突飞猛进的3D网游
  19. 06-HTML5新增元素
  20. rhino7.0破解版下载|Rhinoceros 7中文破解版下载(附注册机)

热门文章

  1. IT人看奥运(日本真是躺着也中枪)
  2. 微信公众号开发淘宝优惠券查询的思路和原理
  3. QQ群怎么快速封群,如何举报骗子QQ群可以使之封群?
  4. Steaming技术初体验
  5. 端游服务器文件转成手游,苦等三年,当年画面最好的端游终于要做成手游了!...
  6. SSL常见错误及解决方法
  7. python爬虫selenium和bs4_python爬虫――selenium+bs4爬取选股宝‘利好‘or’利空'股票信息...
  8. ECCV2020-DETR笔记
  9. three.js 凹凸贴图
  10. nuc7 android tv,NUC7PJYH HDMI在特定显示屏上出现问题