前沿

据悉苹果强制APP在2016年底使用ATS协议,所以公司准备将部分站点http统一替换成https。所有我们就得测试下

1.首先原有的haproxy1.5升级到了1.7版本支持ssl

2.查看相关文档,测试

3.如果站点经过CDN加速,还需要确认CDN是否支持https或者支持是否收取额外费用

4.等等。。。。。。

1.现有环境

2.haproxy代理ssl模式

haproxy 代理 ssl 有两种方式

1、haproxy 本身提供ssl 证书,后面的web 服务器走正常的http (偷懒方式)
2、haproxy 本身只提供代理,后面的web服务器https

  • 第一种是我们选择的模式,在haproxy这里设定SSL,这样我们可以继续使用七层负载均衡。SSL连接终止在负载均衡器haproxy ----->解码SSL连接并发送非加密连接到后端应用tomcat,这意味着负载均衡器负责解码SSL连接,这与SSL穿透相反,它是直接向代理服务器发送SSL连接的。

  • 第二种使用SSL穿透,SSL连接在每个tomcat服务器终止,将CPU负载都分散到tomcat服务器。然而,这样做会让你失去增加或修改HTTP报头的能力,因为连接只是简单地从负载均衡器路由到tomcat服务器,这意味着应用服务器会失去获取 X-Forwarded-* 报头的能力,这个报头包含了客户端IP地址、端口和使用的协议。

  • 有两种策略的组合做法,那就是第三种,SSL连接在负载均衡器处终止,按需求调整,然后作为新的SSL连接代理到后台服务器。这可能会提供最大的安全性和发送客户端信息的能力。这样做的代价是更多的CPU能耗和稍复杂一点的配置。

  • 选择哪个策略取决于你及应用的需求。SSL终端为我所见过最典型的策略,但SSL穿透可能会更安全。

ps:这段是招扒的wangzan18的。在此谢谢

第一种方式

需要编译haproxy 支持ssl,编译参数:

make TARGET=linux26 USE_OPENSSL=1 ADDLIB=-lz
ldd haproxy | grep ssl
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fb0485e5000)

配置参数:

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.250.47:80 check cookie s1
server s2 192.168.250.49:80 check cookie s2

注意:这里的pem 文件是下面两个文件合并而成:

cat servername.crt servername.key |tee servername.pem

第二种方式配置

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

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.250.47:443
server s2 192.168.250.49:443

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

3.配置说明

这一行要加,要不然reload会警告

tune.ssl.default-dh-param 2048

保留80,同时支持443 ssl,后面指定证书文件

redirect scheme https if !{ ssl_fc }

这一行是仅支持ssl,效果是:访问80端口是自动跳转到443的ssl

这是针对node生效,如果想全局使用的话,可以把这句话添加到frontend下

这是针对node生效,如果想全局使用的话,可以把这句话添加到frontend下

参考链接

https://cbonte.github.io/haproxy-dconv/

http://www.voidcn.com/blog/aaronsa/article/p-5671440.html

http://www.voidcn.com/blog/wangzan18/article/p-5794515.html

https://wakatime.com/blog/23-how-to-scale-ssl-with-haproxy-and-nginx

https://www.digitalocean.com/community/tutorials/how-to-implement-ssl-termination-with-haproxy-on-ubuntu-14-04

HAProxy配置SSL的更多相关文章

  1. haproxy配置基于ssl证书的https负载均衡

    本实验全部在haproxy1.5.19版本进行测试通过,经过测试1.7.X及haproxy1.3版本以下haproxy配置参数可能不适用,需要注意版本号. 一.业务要求现在根据业务的实际需要,有以下几 ...

  2. HAproxy 配置参数详解

    HAproxy 配置参数详解 /etc/haproxy/haproxy.cfg # 配置文件 ----------------------------------------------------- ...

  3. haproxy实现ssl套接字加密

    概述 如果你的应用使用SSL证书,则需要决定如何在负载均衡器上使用它们. 单服务器的简单配置通常是考虑客户端SSL连接如何被接收请求的服务器解码.由于负载均衡器处在客户端和更多服务器之间,SSL连接解 ...

  4. Windows下Nginx配置SSL实现Https访问(包含证书生成)

    Vincent.李   Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...

  5. Tomcat:配置SSL

    SSL简述 SSL就是安全套接字层,是一种允许web浏览器和 web服务器通过安全连接通信的技术.这是一个双向的过程,这意味着 服务器和浏览器在发送数据之前加密所有交流的数据. SSL有一个重要的特点 ...

  6. Apache安装及配置ssl

    目录 1.windows安装 软件准备 安装apache 开启ssl(Https访问) 打开httpd.conf,解除下面配置的注释 查看ssl模块使用哪一个配置文件 配置https虚拟主机 简单配置 ...

  7. Python-day3作业-haproxy配置文件管理脚本

    #!/usr/bin/env python import os,sys,time,re,prettytable,json from collections import defaultdict,Ord ...

  8. Nginx 下配置SSL证书的方法

    1.Nginx 配置 ssl 模块 默认 Nginx 是没有 ssl 模块的,而我的 VPS 默认装的是 Nginx 0.7.63 ,顺带把 Nginx 升级到 0.7.64 并且 配置 ssl 模块 ...

  9. Tomcat 7.0配置SSL的问题及解决办法

    http://dong-shuai22-126-com.iteye.com/blog/1830209   以前一直在用Tomcat 6.0.29版本,今下载了apache-tomcat-7.0.33- ...

随机推荐

  1. java 给指定时间加上天数or给当前日期加天数

    给指定日期加上天数: /** * 指定日期加上天数后的日期 * @param num 为增加的天数 * @param newDate 创建时间 * @return * @throws ParseExc ...

  2. static 使用要注意的地方

     protected static string headimg = string.Empty; 这里用到 static ,下面如果这样写    object himg = DBUtility.DbH ...

  3. JAVASE02-Unit010: 多线程基础 、 TCP通信

    多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多 ...

  4. CentOS 系统目录解析

    CentOS 系统目录解析 http://mp.weixin.qq.com/s?__biz=MzAxOTAzMzEzNg==&mid=202463614&idx=2&sn=51 ...

  5. inux中shell截取字符串方法总结

    shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...

  6. python 类型大小

    返回单位:字节 sys.getsizeof() import sys>>> sys.getsizeof(') >>> sys.getsizeof(') >&g ...

  7. Java实现归并排序

    package Sort; import java.util.Arrays; public class MergeSort { public static void merge(int[] list, ...

  8. 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记

    系统信息:CentOS 64位. 一张图了解命令提示符和命令行 一些实用小命令 mkdir(make directory,创建目录).ls(list,列出当前目录下的内容).rm(remove,删除文 ...

  9. oracle数据库相关知识点

    已知表如下:

  10. csuoj 1117: 网格中的三角形

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1117 1117: 网格中的三角形 Time Limit: 3 Sec  Memory Limit: ...