迈向HTTPS(七)反向代理服务器代理HTTPS
对于一定规模的企业来说,在部署 HTTPS 的时候,一般不会在具体的 WEB 服务器(RealServer)上部署证书和密钥对,原因有多个:
为了负载均衡,大部分企业在 WEB 服务器(RealServer)前面一般会部署负载均衡服务器,比如 Load Balance 或者反向代理服务器。
在 RealServer 上部署证书,假如具体服务器数量很多,管理证书非常繁琐
同时 HTTPS 的交互非常消耗 CPU,在 RealServer 上部署证书,可能会影响具体服务的运行(比如 PHP-FPM)
所以很多企业在具体部署的时候,会选择这样一个方案:Client=>(HTTPS)Nginx=>(HTTP)RealServer,选择这个方案的原因在于:
Nginx 代理 RealServer,这样 RealServer 很好扩容
同时 Nginx 负责大量运算的 SSL 请求,而 RealServer 负责具体的 HTTP 请求,和没有部署 HTTPS 以前一样。
看了这个方案,有些开发者会说代理服务器到 RealServer 的请求是 HTTP 的,会不会还是存在安全问题?理论上说确实会。不过考虑到 RealServer 一般处于内部防火墙保护中,可以认为相对是安全的。不过一般危险总是从内部产生的,所以可以采用这样一个方案:Client=>(HTTPS)Nginx=>(HTTPS)RealServer。
初看到这样一个方案的时候,会有以下的疑惑:
另外 Nginx 作为代理服务器,如何像客户端一样进行 HTTPS 交互,比如 Nginx 代理服务器并没有根证书。
假如内部请求也是 HTTPS 连接,那么是否表示需要更多的证书?
在每个层面都有证书,证书管理是一项大工程。
假如内部也是 HTTPS 连接,那么 RealServer 负载就会很大,因为也有完整的 HTTPS 交互流程。
幸好 Nginx 功能非常强大,看如何解决的。先贴具体的配置:
#### Nginx 代理服务器server {listen 443;server_name sitename.example.org;location / {proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-Proto https;proxy_redirect off;proxy_ssl_verify off;proxy_ssl_session_reuse onproxy_pass http://internal.sitename.example.org;proxy_http_version 1.1;}ssl on;....ssl_certificate /etc/ssl/certs/wildcard.example.org.pem;ssl_certificate_key /etc/ssl/private/wildcard.example.org.key;}
#### RealServer,安装的也是 Nginx server {ssl listen 443;server_name internal.sitename.example.org;ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;}
我们主要看 RealServer 配置:
proxy_ssl_verify 指令关闭证书的校验,表示代理服务器信任证书即可,不做严格的校验。这个指令是 Nginx 1.7 才支持的,假如你的 Nginx 版本比较低,没有关系,因为默认是关闭的。
RealServer 上的证书没有必要购买,可以自建在签名证书,在 Ubuntu 系统上默认有“snakeoil” 证书,默认地址是 /etc/ssl/certs/ssl-cert-snakeoil.pem ,假如没有这文件,运行这命令 make-ssl-cert generate-default-snakeoil --force-overwrite 就会产生。这个命令的好处就是每次运行得到的证书都是变化的,这样就避免了证书管理的安全问题。
在代理服务器上,对于内部的 HTTPS 请求,不会进行证书的校验,这样减少了 RealServer 具体处理负载(具体有多少影响没有验证)。
进一步优化,开启 proxy_ssl_session_reuse 指令后,表示重用上一次 SSL 连接,这样进一步减少了 RealServer 的负载。
参考:
HTTPS behind your reverse proxy
SECURING HTTP TRAFFIC TO UPSTREAM SERVERS
SECURING TCP TRAFFIC TO UPSTREAM SERVERS
迈向HTTPS(七)反向代理服务器代理HTTPS相关推荐
- Nginx配置https,反向代理多实例tomcat的操作记录
案例说明: 前面一层nginx+Keepalived部署的LB,后端两台web服务器部署了多实例的tomcat,通过https方式部署nginx反向代理tomcat请求.配置一如下: 1)LB层的ng ...
- ci框架 反向代理配置_通过 nginx-proxy 实现自动反向代理和 HTTPS
本章节代码已经上传至 https://github.com/siegrainwong/.NET-Core-with-Docker/tree/master/Part3 系列大纲 这次我们讲第三篇: 用 ...
- nginx https透明代理_Nginx反向代理https,配置lets-encrypt证书教程
前言 本站也终于迁移到https了,由于全Docker部署,迁移过程中真是艰难无比(wordpress那块被折腾的想放弃了),也欢迎访问本人博客,(知乎的排版有些乱) Nginx反向代理https,配 ...
- Nginx 反向代理https
作者:敖士伟 说明: 1.nginx 1.2.0 centos 6.2 2.这里所指的反向代理https是指nginx为ssl服务器,nginx与后端服务器的通信还是http,当然可能也可以实现ngi ...
- nginx 反向代理https配置
配置nginx 反向代理https server {listen 443 ;#ssl http2 default_server;server_name xxxx.com;# access_log lo ...
- Nginx反向代理https
Nginx反向代理https 系统环境 系统版本:CentOS7.3 64bit 软件版本: nginx-1.12.2.tar.gz 官网地址:http://nginx.org/ pcre-8. ...
- nginx反向代理Https、代理解决跨域问题
一.反向代理Https (1)先获取https证书(nginx用的) (2)配置nginx 配置文件: C:\nginx-1.20.1\conf\nginx.conf linux配置: server ...
- 添加https后反向代理gateway报错io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record
添加https后反向代理gateway报错 2023-02-17 14:19:05.328 [reactor-http-epoll-4] ------ ERROR c..si.gateway.exce ...
- 使用frp结合nginx实现对https的反向代理支持
2.frps,也就是服务器端的设置 在本例中,nginx和frps服务器端是安装在一起的. 主域名:test333.com www.test333.com (这是购买的带有ipv4和ipv6的外 ...
最新文章
- 中国或将于2018年在晶圆代工支出领域位列世界第二
- Meta AI推出“杂食者”:一个模型搞定图像、视频和3D数据三大分类任务,性能还不输独立模型...
- javascript之数组操作
- 年报系统课堂讨论记录
- linux ffmpeg 64下载,linux ffmpeg 怎么编64位
- mysql killed进程不结束_优秀的数据库产品——MySQL 云数据库服务
- 2022年中国AI芯片行业深度研究
- docker安装xxl-job-admin步骤
- tomcat安全认证
- java ireport动态报表_JasperReport学习笔记5-其它数据生成动态的报表(WEB)
- bzoj3275: Number
- 【学习笔记】程序设计导引及在线实践 数值转换问题
- ASP.NET MVC- UrlHelper的用法
- 坯子库怎么导入插件_【亲测能用】草图大师Sketchup坯子库插件管理器SU2014-2019插件64位下载-羽兔网...
- SSH注册通过邮箱激活
- 什么是肿瘤伴随诊断行业?
- 推进智慧工地建设,智慧工地是什么?建筑工地人必看!
- Android 项目是如何编译成.apk的
- erp知识基础-会计
- PLC(Power Line Carrier)电力线载波介绍