Nginx+Tomcat+SSL 识别 https还是http
实际上, 大规模的网站都有很多台Web服务器和应用服务器组成,用户的请求可能是经由 Varnish、HAProxy、Nginx之后才到应用服务器,中间有好几层。而中小规模的典型部署常见的是 Nginx+Tomcat 这种两层配置,而Tomcat 会多于一台,Nginx 作为静态文件处理和负载均衡。
如果Nginx作为前端代理的话,则Tomcat根本不需要自己处理 https,全是Nginx处理的。用户首先和Nginx建立连接,完成SSL握手,而后Nginx 作为代理以 http 协议将请求转给 tomcat 处理,Nginx再把 tomcat 的输出通过SSL 加密发回给用户,这中间是透明的,Tomcat只是在处理 http 请求而已。因此,这种情况下不需要配置 Tomcat 的SSL,只需要配置 Nginx 的SSL 和 Proxy。
在代理模式下,Tomcat 如何识别用户的直接请求(URL、IP、https还是http )?
在透明代理下,如果不做任何配置Tomcat 认为所有的请求都是 Nginx 发出来的,这样会导致如下的错误结果:
- request.getScheme() //总是 http,而不是实际的http或https
- request.isSecure() //总是false(因为总是http)
- request.getRemoteAddr() //总是 nginx 请求的 IP,而不是用户的IP
- request.getRequestURL() //总是 nginx 请求的URL 而不是用户实际请求的 URL
- response.sendRedirect( 相对url ) //总是重定向到 http 上 (因为认为当前是 http 请求)
如果程序中把这些当实际用户请求做处理就有问题了。解决方法很简单,只需要分别配置一下 Nginx 和 Tomcat 就好了,而不用改程序。
配置 Nginx 的转发选项:
proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;
配置Tomcat server.xml 的 Engine 模块下配置一个 Value:
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For"protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>
配置双方的 X-Forwarded-Proto 就是为了正确地识别实际用户发出的协议是 http 还是 https。X-Forwarded-For 是为了获得实际用户的 IP。
这样以上5项测试就都变为正确的结果了,就像用户在直接访问 Tomcat 一样。
文章参考:负载均衡配置
# nginx 部分配置参考server {server_name www.zhangblog.com;listen 443;index index.jsp;ssl on;ssl_certificate /mnt/releaseCert/serverbundle.crt;ssl_certificate_key /mnt/releaseCert/serverbundle.key;if ($request_uri ~* "\.html$"){rewrite ^/(.*)$ http://$host/$1 redirect;}location / {proxy_pass http://10.171.27.25:9002; # 内网IPproxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}server{server_name www.zhangblog.com;listen 80;index index.jsp;if ($request_uri ~* "/pmcs/$"){rewrite ^/(.*)$ https://$host/$1 redirect;}if ($request_uri ~* "/pmcs/login.jsp$"){rewrite ^/(.*)$ https://$host/$1 redirect;}location / {proxy_pass http://10.171.27.25:9002;proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
Nginx+Tomcat+SSL 识别 https还是http相关推荐
- Nginx:Nginx添加SSL实现HTTPS访问
上一篇博文给大家介绍了Nginx的安装与运行: Nginx:Nginx安装与运行 今天博主给大家分享如何给Nginx添加SSL,实现HTTPS访问Nginx服务,但前提条件是你的服务器有SSL,博主是 ...
- nginx配置ssl实现https访问 亲测有效
nginx配置ssl实现https访问 亲测有效 申请证书 运行用户,默认即是nginx,可以不进行设置 停止nginx 启动 nginx日常操作命令 申请证书 在这里,我直接申请腾讯云的免费证书.这 ...
- Nginx 配置 SSL 及 HTTPS 协议通信过程
一.前言 基础知识 1.1 公钥密码体制(public-key cryptography) 公钥密码体制分为三个部分,公钥.私钥.加密解密算法,它的加密解密过程如下: 加密:通过加密算法和公钥对内容( ...
- Nginx 配置 SSL 证书 + HTTPS 站点小记
今天给几个站点配置了认证的 ssl 证书,但是苦于自己技术不过关,或是知识不足,导致还有那么一小点 Bug 的出现,这里就我配置 HTTPS 站点的经验来总结一下吧. 一.什么是 SSL 证书,什么是 ...
- Nginx配置ssl证书(https证书)
https协议是由SSL+http协议构建的安全协议,支持加密传输和身份认证, 安全性比http要更好,因为数据的加密传输,更能保证数据的安全性和完整性. 安装nginx 1.启动容器: 拉取镜像 d ...
- 解决Nginx+Tomcat下客户端https请求跳转成http的问题
Nginx上开启https, 后端使用Tomcat, 两者间走http协议, 但发现如果tomcat应用存在跳转时, 则客户端浏览器会出现400 Bad Request的错误, 通过抓包发现原因是 ...
- nginx部署ssl转发https协议请求
在小程序上线的时候需要服务器为https请求,那么就需要ssl证书,SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能.但后 ...
- Nginx使用SSL配置HTTPS
创建服务器私钥 openssl genrsa -des3 -out server.key 1024 创建签名请求的证书(CSR) openssl req -new -key server.key -o ...
- Django云服务器配置Nginx站点SSL证书HTTPS协议
如果自己已经能独立使用 Python 的 Django 框架完成一个项目了,现在需要进行部署服务以及相关项目分发的二级域名了.不过至于什么是 http 和 https 这里不做科普,不懂的请找度娘. ...
- Nginx + Tomcat + HTTPS 配置不需要在 Tomcat 上启用 SSL 支持
2019独角兽企业重金招聘Python工程师标准>>> Nginx SSL+tomcat集群 Nginx tomcat no 不用https 最近做了个Web项目, 架构上使用了 N ...
最新文章
- kubeadmin 安装 k8s集群
- mysql decimal型转化为float_5分钟搞懂MySQL数据类型之数值型DECIMAL类型
- 14个JavaScript代码优化技巧
- jsonrpc aria2_抛弃迅雷,Aria2 新手入门
- GB28181系统设计(四)-横向扩展和纵向扩展
- ECS之System系统
- 驱动兼容_【重磅】上海数明发布国内首款兼容光耦隔离式单通道栅极驱动器系列产品SLM34x...
- vue 判断权限过期_vue 路由权限
- hiho一下 第五十周 (求欧拉路径)
- 【noip2013】d2解题报告
- 翼虎AE教程 Max贴图教程 地址备份。。。。
- Java中定时任务的6种实现方式,你知道几种?
- 我的iPad/iPhone App推荐列表
- ad采样正弦电压计算c语言程序,TMS320F2812 DSP编程之AD采样精度的校准算法(转)...
- Java SE 集合:Map接口
- minikube start命令的国内使用方法
- 微信小游戏制作大厅里的排行榜(跟游戏内的排行榜有区别)
- 贼有趣:朱茵变杨幂,人工智能换脸让明星不再担心自己演技?
- 慧据价值 链接未来丨第八届数据技术嘉年华大会全议程呈现
- Java:MouseListener、MouseMotionListener监听器与MouseEvent事件