• Nginx+Tomcat Https SSL部署方案


    1、软件版本:

    nginx-1.15+

    tomcat-8.0+

    2、先解决一个疑问:Tomcat到底需不需要配置SSL?

    答案:不需要

    3、SSL申请

    使用腾讯云、阿里云的服务器,会更加方便申请。(申请过程略)

    申请完以后会得到两个文件:

    1_www.domain.com_bundle.crt 证书文件
    2_www.domain.com.key 私钥文件

    将这两个文件拷贝到 Nginx 服务器的 /usr/local/nginx/conf 目录下。

    4、前提:nginx安装了ssl模块,如果没有安装,点下面的链接:

    https://www.cnblogs.com/hunttown/p/5757829.html

    5、nginx证书部署

    server {
         #SSL 访问端口号为 443
         listen 443 ssl; 
         #填写绑定证书的域名
         server_name www.domain.com; 
         #证书文件名称
         ssl_certificate 1_www.domain.com_bundle.crt; 
         #私钥文件名称
         ssl_certificate_key 2_www.domain.com.key; 
         ssl_session_timeout 5m;
         #请按照这个协议配置
         ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
         #请按照这个套件配置,配置加密套件,写法遵循 openssl 标准。
         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
         ssl_prefer_server_ciphers on;
         location / {
             #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
             root /var/www/www.domain.com; 
             index  index.html index.htm;
         }
     }

    6、部署完毕以后进行测试

    ./sbin/nginx -t

    7、有人会出现这个问题:NGINX报错 : [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead

    原因是:新版本nginx需要这样配置

    #
    listen 443
    ssl on
    
    #改成:
    listen 443 ssl

    问题解决,SSL部署完毕!

    8、如何在应用中取https正确的协议

    问题:

    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

    (1)配置 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;

    (2)配置Tomcat server.xml 的 Engine 模块:

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

    问题解决!

  • 相关阅读:
    分布式系统关注点(3)——过去这几十年,分布式系统的「数据一致性」精华都在这了!
    分布式系统关注点(1)——不知道是不是最通俗易懂的《数据一致性》剖析了
    《西虹市首富》给我们技术人带来的思考
    Kaazing Gateway简单使用
    pylot测试工具环境搭建
    NodeJS学习笔记
    JavaScript逗号操作符
    翻译:SockJS-node文档(一)
    【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性
    2015年总结与2016年目标和计划
  • 原文地址:https://www.cnblogs.com/hunttown/p/11642769.html
Copyright © 2020-2023  润新知