haproxy配置sni实现https多域名代理
需求
haproxy需要同时实现内网机器通过http和https代理访问互联网,但是https代理我们没有证书,而且内网多个服务都需要通过代理访问不同的域名的https服务。
SSL初期的设计顺应经典的公钥基础设施 PKI(Public Key Infrastructure)设计,PKI 认为一个服务器只为一个域名提供服务,从而一个服务器上也就只能使用一个证书。
随着HTTP 服务器开启虚拟主机支持后,每个服务器通过相同的IP地址可以为很多域名提供服务。这种为虚拟主机提供通信安全的简单途径,却经常导致使用了错误的数字证书,因为服务器端无法知道客户端到底请求的是哪个域名下的服务,从而导致浏览器对用户发出警告。
引入sni
SNI (Server Name Indication)是用来改善服务器与客户端 SSL (Secure Socket Layer)和 TLS (Transport Layer Security) 的一个扩展。主要解决一台服务器只能使用一个证书(一个域名)的缺点,随着服务器对虚拟主机的支持,一个服务器上可以为多个域名提供服务,因此SNI必须得到支持才能满足需求。
SNI的TLS扩展通过发送虚拟域的名字做为TSL协商的一部分修正了这个问题,在Client Hello阶段,通过extensions扩展引入sni,将域名信息提前告诉服务器,服务器根据域名取得对应的证书返回给客户端已完成校验过程。
注意:sni的引入是在tcp传输层。
haproxy配置sni
# Global settings
globallog 127.0.0.1 local3chroot /var/lib/haproxypidfile /var/run/haproxy.pidmaxconn 4000user haproxygroup haproxydaemon# turn on stats unix socketstats socket /var/lib/haproxy/statsdefaultslog globaloption dontlognulloption http-server-closeoption redispatchretries 3timeout http-request 10stimeout queue 1mtimeout connect 10stimeout client 1mtimeout server 1mtimeout http-keep-alive 10stimeout check 10smaxconn 3000#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
#tcp proxy https
frontend https_proxymode tcpbind :443tcp-request inspect-delay 5stcp-request content accept if { req_ssl_hello_type 1 }acl is_api.mch.weixin.qq.com req_ssl_sni -i api.mch.weixin.qq.comacl is_openapi.alipay.com req_ssl_sni -i openapi.alipay.comacl is_openapi.alipaydev.com req_ssl_sni -i openapi.alipaydev.comacl is_eco.taobao.com req_ssl_sni -i eco.taobao.comacl is_graph.qq.com req_ssl_sni -i graph.qq.comacl is_api.weibo.com req_ssl_sni -i api.weibo.comacl is_api.weixin.qq.com req_ssl_sni -i api.weixin.qq.comacl is_mapi.alipay.com req_ssl_sni -i mapi.alipay.comacl is_api.jpush.cn req_ssl_sni -i api.jpush.cnuse_backend api.mch.weixin.qq.com if is_api.mch.weixin.qq.comuse_backend openapi.alipay.com if is_openapi.alipay.comuse_backend openapi.alipaydev.com if is_openapi.alipaydev.comuse_backend eco.taobao.com if is_eco.taobao.comuse_backend graph.qq.com if is_graph.qq.comuse_backend api.weibo.com if is_api.weibo.comuse_backend api.weixin.qq.com if is_api.weixin.qq.comuse_backend mapi.alipay.com if is_mapi.alipay.comuse_backend api.jpush.cn if is_api.jpush.cnbackend api.mch.weixin.qq.comserver web1 api.mch.weixin.qq.com:443backend openapi.alipay.comserver web1 openapi.alipay.com:443backend openapi.alipaydev.comserver web1 openapi.alipaydev.com:443backend eco.taobao.comserver web1 eco.taobao.com:443backend graph.qq.comserver web1 graph.qq.com:443backend api.weibo.comserver web1 api.weibo.com:443backend api.weixin.qq.comserver web1 api.weixin.qq.com:443backend mapi.alipay.comserver web1 mapi.alipay.com:443backend api.jpush.cnserver web1 api.jpush.cn:443
#http proxy
frontend http_proxymode httpbind :80acl is_api.map.baidu.com hdr_beg(host) -i api.map.baidu.comacl is_wappaygw.alipay.com hdr_beg(host) -i wappaygw.alipay.comacl is_gw.api.taobao.com hdr_beg(host) -i gw.api.taobao.comuse_backend api.map.baidu.com if is_api.map.baidu.comuse_backend wappaygw.alipay.com if is_wappaygw.alipay.comuse_backend gw.api.taobao.com if is_gw.api.taobao.combackend api.map.baidu.commode httpserver web1 api.map.baidu.combackend wappaygw.alipay.commode httpserver web1 wappaygw.alipay.combackend gw.api.taobao.commode httpserver web1 gw.api.taobao.com
从上面的tcp代理处,我们可以看到通过sni区分不同的域名从而选择后端的服务器。
另在http代理处,我们可以看到也使用host区分域名实现不同的后端转发。
haproxy配置sni实现https多域名代理相关推荐
- 1 阿里云Nginx配置https实现域名访问项目
第一步:签署第三方可信任的 SSL 证书 证书可以直接在阿里云里面申请免费的ssl证书 登录阿里云账号,在上方搜索栏内搜索ssl,点击ssl证书(应用安全) 来到这个页面后点击购买证书 如图选择免费版 ...
- windows配置NGINX、NGINX配置SSL证书通过HTTPS访问、使用HTTPS通过NGINX代理访问服务器端项目
1.windows配置nginx 1)在nginx官网下载稳定版nginx,nginx官网:http://nginx.org/en/download.html 2)解压文件,注:存放目录最好不要带有中 ...
- pfx证书密码怎么查询_网站是HTTP?10分钟变成HTTPS!域名免费添加配置SSL证书,变成https//环境...
对于小程序request请求需要https域名.navigator.geolocation定位也需要在https环境下才可以生效等问题: 前端开发越来越需要https环境来来测试一下API接口和各类问 ...
- Confluence7 配置docker Nginx https 反向代理
前言:首先默认你的Confluence 已经安装好并且设置好证书,此处不做证书导入等介绍. 1.docker 1.拉取仓库nginx镜像,不加版本号默认拉取最新的版本#docker pull ngin ...
- 个人购买的域名(需要公网服务器)快速配置免费的HTTPS证书【有手就行】
文章目录 配置免费的HTTPS证书 0. 开放443端口 1. 进入https://freessl.cn/ 2. 创建证书 3. 配好后,点击验证,生成证书.以及公钥 4. Nginx配置 5. 访问 ...
- 搭建HTTPS从域名申请、SSL证书申请、Nginx配置等一步步玩起来。
HTTPS协议介绍 HTTPS,是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL. 配置HTTPS就需要证 ...
- haproxy配置TCP代理
haproxy配置TCP代理 安装: yum -y install haproxy 备份原配置文件: cp -rf /etc/haproxy/haproxy.cfg{,.bak} 删除配置文件中的注释 ...
- 网站是HTTP?10分钟变成HTTPS!域名免费添加配置SSL证书,变成https//环境
对于小程序request请求需要https域名.navigator.geolocation定位也需要在https环境下才可以生效等问题: 前端开发越来越需要https环境来来测试一下API接口和各类问 ...
- 单阿里云负载均衡(CLB)实例配置多域名HTTPS网站(HTTPS多域名)
1.将域名都解析到CLB对应的ip地址,操作如下图所示: 2.在CLB实例管理-监听中配置相应的扩展域名 3.在CLB实例管理-虚拟服务器组中配置相应的转发策略 具体的参考文档见:单CLB实例配置多 ...
- NGINX SSL配置之设置HTTPS服务器
NGINX SSL配置 本节介绍如何在NGINX和NGINX Plus上配置HTTPS服务器. 设置HTTPS服务器 要设置HTTPS服务器,请在您的nginx.conf文件中的块中ssl将该list ...
最新文章
- JS_高程6.面向对象的程序设计(2)创建对象_1
- IIS 发布网站到外网
- 【收藏】GeoMesa Spark
- P1314 聪明的质监员(前缀和+二分)
- JBI与SCA的区别
- 傻孩子的故事--写给为编程而努力的HiccDS
- 2015/4/14课堂练习
- java 使用接口便于维护程序_Java初学——面向对象接口的应用
- Extjs嵌入html
- electron 前端开发桌面应用
- 零基础学python知乎-35岁了零基础自学Python可行吗?
- 苏宁:我们开发百度小程序遇到的那些“坑”
- 基于同义词词林的词语间相似度计算
- mina框架详解(一)
- (原创)Android 清除第三方应用的数据缓存实现(包括清除系统应用缓存)
- Mac命令行出现-bash: command not found的解决办法
- runtime error python 3.5_Python 3.5 RuntimeError: can't start new thread
- kerberos开启kdc的debug日志
- python求单词长度_python 统计单词平均长度,统计a出现的次数
- 赚钱不能莫良心,苍天有眼都在看 -----至张玮