运维

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

MarginNote 3 - Mac端PDF阅读批注工具 激活码价格:¥69.00
赤友 NTFS for Mac 助手 -  磁盘硬盘格式读写软件注册激活码价格:¥35.00
虫洞 -  iPhone安卓投屏操控 电脑手机多屏协同,价格:¥45.00
namesilo全网最便宜域名注册商,输入折扣码:nsilo20立减1美元!

之前自己曾在网上搜索到的很多文章均描述同时在Nginx+Tomcat启用HTTPS支持,为什么我们不能直接在Nginx上启用了HTTPS反代理Tomcat 让Nginx于Tomcat之间走普通的 HTTP 连接呢?答案是可以的!Nginx+Tomcat+HTTPS配置不需要在Tomcat上启用SSL支持最近给课在线学习平台弄了个*.maimuke.com的泛域名证书,然后我又不想在Tomcat上配HTTPS!于是努力找到了解决方案。最终配置的方案是浏览器和 Nginx之间走的HTTPS通讯,而Nginx到Tomcat通过proxy_pass走的是普通 HTTP 连接。Nginx+Tomcat+HTTPS配置不需要在Tomcat上启用SSL支持下面是详细的配置(Nginx 端口 80/443,Tomcat 的端口 8080):
1.Nginx+HTTPS做反代理简单设置:

upstream tomcat {
    server 127.0.0.1:8080 fail_timeout=0;
}

# HTTPS server
server {
    listen       443 ssl;
    server_name  localhost;
    
    ssl_certificate      /home/maimuke/www/SSL/maimuke.bundle.crt;
    ssl_certificate_key  /home/maimuke/www/SSL/maimuke.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    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_connect_timeout      240;
        proxy_send_timeout         240;
        proxy_read_timeout         240;
        # note, there is not SSL here! plain HTTP is used
        proxy_pass http://tomcat;
    }
}

其中最为关键的就是 ssl_certificate 和 ssl_certificate_key 这两项配置,其他的按正常配置。不过多了一个 proxy_set_header X-Forwarded-Proto https; 配置。
2.最主要的配置来自Tomcat,下面是我开发环境中的完整 server.xml:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443"
               proxyPort="443"/>

    <Engine name="Catalina" defaultHost="localhost">

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.RemoteIpValve"
                  remoteIpHeader="x-forwarded-for"
                  remoteIpProxiesHeader="x-forwarded-by"
                  protocolHeader="x-forwarded-proto"
            />
            <Context path="" docBase="/www/webapp" reloadable="false"/>
      </Host>
    </Engine>
  </Service>
</Server>

上述的配置中没有什么特别的,但是特别特别注意的是必须有 proxyPort="443",这是整篇文章的关键,当然 redirectPort 也必须是 443。同时 节点的配置也非常重要,否则你在 Tomcat 中的应用在读取 getScheme() 方法以及在 web.xml 中配置的一些安全策略会不起作用。

(0)

本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!

关键词:, , , ,
ToDesk - 安全好用流畅远程控制软件 替代TeamViewer,价格:¥108.00
Eagle - 图片收集管理必备软件 激活码价格:¥119.00
PDF Expert 2 - Mac上优秀的PDF阅读编辑工具,价格:¥119.00

热评文章

发表评论