2019独角兽企业重金招聘Python工程师标准>>>

Nginx SSL+tomcat集群 Nginx tomcat no 不用https

最近做了个Web项目, 架构上使用了 Nginx +tomcat 集群, 且全站HTTPS,用nginx 做负载,nginx和tomcat 使用内网http通信,遇到http css,js静态资源被浏览器拦截问题,网上搜索到的很多文章在描述 Nginx + Tomcat 启用 HTTPS 支持的时候,都必须在 Nginx 和 Tomcat 两边同时配置 SSL 支持,今天做个总结。

遇到问题

  1. nginx强制使用https访问(http跳转到https)
  2. http的js,css 等静态资源被浏览器拦截(http不被信任)

最后的解决方案

首先解决第一个问题全站https
参考
三种方式,跟大家共享一下

nginx的rewrite方法

server {
listen  192.168.1.111:80;
server_name test.com;
rewrite ^(.*)$  https://$host$1 permanent;
}

nginx的497状态码,我选择了这种方式

server {  listen       192.168.1.11:443;  #ssl端口  listen       192.168.1.11:80;   #用户习惯用http访问,加上80,后面通过497状态码让它自动跳到443端口  server_name  test.com;  #为一个server{......}开启ssl支持  ssl                  on;  #指定PEM格式的证书文件   ssl_certificate      /etc/nginx/test.pem;   #指定PEM格式的私钥文件  ssl_certificate_key  /etc/nginx/test.key;  #让http请求重定向到https请求   error_page 497  https://$host$uri?$args;
}

index.html刷新网页

<html>
<meta http-equiv="refresh" content="0;url=https://test.com/">
</html>

当http访问到index.html时候自动跳转到https


接下来解决第二个问题
如果tomcat 和nginx 双方没有配置X-Forwarded-Proto tomcat就不能正确区分实际用户是http 还是https,导致tomcat 里配置的静态资源被认为是http而被浏览器拦截,request.getScheme()总是 http,而不是实际的http或https

分别配置一下 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 模块下配置一个 Valve:

<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>  

非80端口配置
Nginx增加以下配置
proxy_set_header Host $host:$server_port; 非80端口 ,用80端口时 不需要$server_port
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 name="Catalina" defaultHost="localhost">
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https" httpsServerPort="7001"/> 非80端口时,必须增加httpsServerPort配置,不然request.getServerPort()方法返回 443.
</Engine>

关于 RemoteIpValve,可以阅读下 doc

http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html

转载于:https://my.oschina.net/Silver2014/blog/680177

Nginx + Tomcat + HTTPS 配置不需要在 Tomcat 上启用 SSL 支持相关推荐

  1. Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置

    Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置 ============================== ©Copyright 蕃薯耀 2017 ...

  2. OpenSSL 把cer证书链以及key文件生成keystore,tomcat https配置

    最近接触的项目中用到HTTPS,并且申请了证书以及私钥,这一块接触的少 先整理出来,谨防以后忘记.因为是tomcat中配置的https,需要将证书转成keystore文件,通过openssl 先通过证 ...

  3. Nginx之https配置

    14.1. 对称加密 安全隐患:钥匙除我之外,还有多个人拥有.泄露风险较大,钥匙传递的过程风险较大 14.2. 非对称加密 优缺点:私钥很安全.但是非对称算法开销很大,大批量应用于业务,会导致性能成本 ...

  4. nginx开启https配置

    最近再做小程序项目上线官方强制要求使用https,这里记录一下nginx下https的部署使用:如果有钱的话可以购买证书这里使用的是免费的 什么是https参考:https://jingyan.bai ...

  5. nginx的https配置及nginx端口转发ssl服务端口

    server在http配置内容如下: server {listen 443 ssl; #监听端口,Nginx1.5后推荐使用server_name www.test.top; #请求域名 ssl_ce ...

  6. tomcat https 配置

    以前基本上笔者对于安全性考虑的并不多,最近因为saas平台要开始逐渐推广,所以需要开始逐渐加强xss/crsf/https等措施以避免潜在的安全性风险.本文简单的记录下tomcat下https的配置. ...

  7. Keytool生成数字证书 + Tomcat https 配置

    参考:http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html https://baike.baidu.com/item/ht ...

  8. jdk tomcat mysql配置_Linux jdk、tomcat、mysql配置

    Linux jdk配置 2. 使用终端,在/usr下创建java文件夹,将下载的jdk压缩包传上,解压文件 mv 源路径/源文件名 目标路径/目标文件名,进入/usr/java目录,解压文件,tar ...

  9. Nginx的Https配置及代理api接口配置

    文章介绍nginx如何配置https并配置代理java接口 1.获取证书 使用certbot生成证书:如何生成证书? (1)将cert.pem复制到该工具进行解析 进入工具网站转换pem (2)解析完 ...

最新文章

  1. 手把手教你看懂并理解Arduino PID控制库——调参改变
  2. 一道简单的面试题:竟然有90%的程序员不能把这个算法完全写正确。。。
  3. 职工信息管理软件c语言大一,职工信息管理(C语言
  4. 留言板asp mysql_ASP简单入门(制作一个简单的留言板 )
  5. 本周五丨数据库智能管控最佳实践与探索
  6. ASP.NET MVC3 Action Filters详解(一)
  7. html text align属性,CSS中的text-align属性怎么用
  8. OS X 使用技巧——在Finder窗口标题栏上显示路径
  9. pywifi 破解WiFi密码
  10. 系泊系统悬链线matlab,孙传耀, 汤鸣晓. 基于MATLAB的系泊系统的设计及其动力分析[J]. 电子技术与软件工程, 2017(6): 62-63....
  11. 基于Matlab的极限学习机(ELM)实现
  12. 小波包分解、重构 matlab代码
  13. python端口绑定错误怎么解决,python的 port binding error 请问怎么解决
  14. Struts功能详解——ActionForm
  15. 手机屏幕上的战争 三星领先苹果半步
  16. 分区助手扩大c盘后自动修复_分区助手扩大c盘的详细操作步骤
  17. 计算机进入启动死循环,Win10开机死循环重启解决方法
  18. 计算机系统最重要的是什么,操作系统最重要的两个作用是什么
  19. background简写属性
  20. 锐龙r77700参数 r7 7700功耗 r7 7700核显性能

热门文章

  1. 【经典算法】第八回:桶排序
  2. 已root手机在DDMS下无法读取data目录的解决办法
  3. 基于windows的IDS配置完全攻略五
  4. 马来游记(2)- 漂浮云顶间。。。
  5. Windows PrintNightmare 漏洞和补丁分析
  6. 微软公布Netgear 固件严重漏洞详情,可盗取用户身份并攻陷系统
  7. 奇安信代码安全实验室五人入选“2020微软 MSRC 最具价值安全研究者”榜单
  8. 一个问题引发的连环血案
  9. 多线程 简单的实现案例
  10. 修改目录还原模式密码