热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SSL在NGINX的配置方法实践无需修改tomcat和程序配置

:本篇文章主要介绍了SSL在NGINX的配置方法实践无需修改tomcat和程序配置,对于PHP教程有兴趣的同学可以参考一下。
SSL方案:
1、NGINX做ssl握手,其与TOMCAT之间仍旧HTTP协议(当NGINX和TOMCAT在同一相对安全的内网时这样做可以减少SSL握手次数)。NGINX的代理转发(proxy_redirect:反向替换proxy_pass或上游,如TOMCAT返回的URL),从HTTP的替换成HTTPS。可包括多条proxy_redirect配置。注意端口号如需要替换也要写入。
2、NGINX强制将接收到的HTTP请求rewrite为HTTPS
3、NGINX做优化方案,包括keepalive_timeout,开启ssl的session缓存。
4、TOMCAT和项目代码及配置文件(目前)不需要变更。
5、需要注意的是,程序从HTTP头部获取的信息,包括HTTPS协议,端口号,客户IP等,数据是正确的。但,若用request.getScheme();(HTTP or HTTPS)request.isSecure();(是否安全,boolean)request.getRequestURL().toString();(URL,带协议名)request.getRemoteAddr();(客户IP地址)等,获取则是错误的,request的信息有nginx转发到tomcat,并未做替换处理,因此获取到的都是nginx的信息,如有需要,在tomcat的server.xml设置一个valve。
-------------------------
nginx配置:
(1)、自定义配置文件,放置于/etc/nginx/conf.d文件夹下,xxx.conf
(2)、引入该文件nginx/nginx.conf文件的http模块最后加入include /etc/nginx/conf.d/*.conf
(3)、nginx.conf文件中做ssl优化配置,http模块最后加入
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
(4)、自定义配置文件xxx.conf中做如下配置:
#HTTP server
server {
#监听端口
        listen       80;
#监听域名/IP
        server_name abc.e-lingcloud.com;
#请求的重定向,该功能的含义及用法请搜索rewrite,该命令可添加在server、location、if模块下。
#本例由于要求转发所有80的http请求,因此rewrite放置于server模块下,且location已注销。
        rewrite ^(.*) https://$host$1 permanent;
        #location / {


              # proxy_pass http://192.168.1.111:8080;
              # proxy_set_header Host $host;
              # proxy_redirect  http://192.168.1.111:8080 http://abc.e-lingcloud.com:59998;
              # 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;
              # proxy_set_header Upgrade $http_upgrade;
              # proxy_set_header Connection "upgrade";
       #}
}
#HTTPS server
server {
#监听HTTPS默认端口443
        listen       443;
#开启SSL
        ssl on;
#监听域名/IP
        server_name abc.e-lingcloud.com;
#HTTPS(若不在SSL的模块内,该命令默认为HTTP保持连接的时长)保持连接的时长,单位秒。具体用法自行搜索。
        keepalive_timeout   70;
#SSL证书(公钥),证书生成方法参考购买证书的网站说明,本例中的证书来自于Godaddy,该证书包括中间证书和发给自己的证书。
        ssl_certificate     /etc/ssl/private/e-lingcloud.crt;
#SSL私钥,该私钥通常在申请证书前生成。记得备份文件。需要注意的是,私钥非常重要,不可泄露,需要存放在访问受限的文件中,当然,nginx主进程必须有读取密钥的权限。私钥和证书可以存放在同一个文件中。
        ssl_certificate_key /etc/ssl/private/e-lingcloud.key;


        location / {
                proxy_pass http://192.168.1.111:8080;
#代理重定向,作用是将上游服务器返回链接中的第一个参数替换为第二个参数。此处比较重要,tomcat和程序不做任何特定配置的话(如tomcat新加valve将http头信息赋到request中),上游服务器(如tomcat)将返回http协议及其链接,用此处重定向为https和指定的服务器域名返回给客户端。
proxy_redirect  http://abc.e-lingcloud.com https://abc.e-lingcloud.com;
                proxy_redirect  https://192.168.1.111:8443 https://abc.e-lingcloud.com;
                proxy_redirect  http://192.168.1.111:8080 https://abc.e-lingcloud.com;
#以下为nginx转发给tomcat的时候,将数据加到http头信息中。具体参数含义和变量的用法请搜索。
                proxy_set_header Host $host:$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;
                #proxy_set_header Upgrade $http_upgrade;
                #proxy_set_header Connection "upgrade";
       }


-----------------------------------------
资料链接及其说明:
nginx的一些配置,需要注意,有错误的地方。
http://blog.csdn.net/na_tion/article/details/17334669
nginx与tomcat之间传递http,使用request.getScheme()取到的仍为http,需要注意,个人建议程序里别用request.getScheme,而是取http头部信息,用该文章提供的方案需要侵入tomcat做配置。
http://feitianbenyue.iteye.com/blog/2056357
与第二条资料配合,tomcat官网关于valve参数的API。告诉你配置的这几项作用是什么。
http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html
与第二条资料配合,第二条资料的灵感出处。需要注意的地方同第二条。
http://han.guokai.blog.163.com/blog/static/136718271201211631456811/

以上就介绍了SSL在NGINX的配置方法实践无需修改tomcat和程序配置,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • MySQL Administrator: 监控与管理工具
    本文介绍了 MySQL Administrator 的主要功能,包括图形化监控 MySQL 服务器的实时状态、连接健康度、内存健康度以及如何创建自定义的健康图表。此外,还详细解释了状态变量和系统变量的管理。 ... [详细]
  • Centos7 Tomcat9 安装笔记
    centos7,tom ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 黑客松获奖名单出炉、NFT艺术周圆满落幕 |Oasis周报 ... [详细]
author-avatar
LYJ189_163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有