`

Ngix + Tomcat + HTTPS

阅读更多
最终配置的方案是浏览器和 Nginx 之间走的 HTTPS 通讯,而 Nginx 到 Tomcat 通过 proxy_pass 走的是普通 HTTP 连接。

下面是详细的配置(Nginx 端口 80/443,Tomcat 的端口 8080):

Nginx 这一侧的配置没什么特别的:

upstream tomcat {
    server 127.0.0.1:8080 fail_timeout=0;
}
 
# HTTPS server
server {
    listen       443 ssl;
    server_name  localhost;
 
    ssl_certificate      /Users/winterlau/Desktop/SSL/oschina.bundle.crt;
    ssl_certificate_key  /Users/winterlau/Desktop/SSL/oschina.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; 配置。

最主要的配置来自 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="/oschina/webapp" reloadable="false"/>
      </Host>
    </Engine>
  </Service>
</Server>

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

相关推荐

    ngix + mysql + php 安装包

    ngix + mysql + php 安装包 非常方便而且简洁的绿色安装包,解决了对新手来说复杂的配置

    ngix_redis_tomcat集群

    redis,redis,tomcat集群实例,tomcat-session-jar文件夹下是需要的jar包,启动nginx,redis,tomcat后在浏览器中输入http://localhost/test/test2.jsp进行测试。

    Windows下使用Nginx+Tomcat做负载均衡的完整步骤

    今天,王子与大家闲谈一下如何在Windows下使用Nginx+Tomcat做负载均衡的完整步骤,小伙伴们可以试着自己动手实践一下哦。 另外说明一点,本篇文章是纯实操文章,不涉及太多原理的解读,后期可能单独开一个专栏来深入...

    在CentOS下安装Ngix服务及集群PHP、Tomcat

    在CentOS下安装Ngix服务及集群PHP、Tomcat

    tomcat+nginx+mybatis+redis整合

    一、部署启动多个tomcat 2 1、背景 2 2、部署多个tomcat 2 二、nginx配置及启用 3 1、nginx的下载和启动 3 2、nginx配置文件 4 3、使用nginx负载均衡 5 4、配置nginx遇到的问题 6 三、mybatis 应用的缓存应用 7 1、...

    tomcat+redis+nginx集群搭建所需jar包

    tomcat+redis+nginx集群搭建所必须依赖的jar包

    tomcat8+nginx1.4+jdk8配置session共享

    tomcat8+nginx1.14+jdk8配置session共享,内含jar包和说明

    用Redis存储Tomcat集群的Session

    用Redis存储Tomcat集群的Session--包括tomcat两个,ngix1.8一个,项目测试一个

    宝塔面板配置文件记录.md

    宝塔面板Tomcat,Ngix等文件配置以及设置记录

    nginx-1.8.0

    ngix-1.8.0下载,windows版本,使用方法:解压该文件夹,进入config文件下的nginx.conf,将其中的tomcat端口更改为目前正在使用的tomcat端口,location改为目前项目的html项目路径即可

    使用Nginx代理上网的方法

    我一般都是使用 nginx 做反向代理 tomcat 和其他应用的,其实 nginx 也是支持正向代理的 所谓正向代理就是内网用户通过网关访问外部资源,就是电脑上网时浏览器设置下 http 代理地址访问互联网 而反向代理就是外部...

Global site tag (gtag.js) - Google Analytics