支持
之前在网上搜索到的很多文章在描述 Nginx + Tomcat 启用 HTTPS 支持的时候,都必须在 Nginx 和 Tomcat 两边同时配置 SSL 支持。但我一直在想为什么就不能按照下面的方式来配置呢?就是 Nginx 上启用了 HTTPS,而 Nginx 和 Tomcat 之间走的却是普通的 HTTP 连接。但是搜索很多没有解决办法,最后还是老老实实的 Nginx 和 Tomcat 同时配置的 SSL 支持。
最近给 OSChina 买了个新的支持 *.oschina.net 泛域名的证书,然后我又开始偷懒的想为什么 Tomcat 一定要配 HTTPS 呢? 没道理啊。然后潜心搜索终于找到了解决方案。原来却是如此的简单。
最终配置的方案是浏览器和 Nginx 之间走的 HTTPS 通讯,而 Nginx 到 Tomcat 通过 proxy_pass 走的是普通 HTTP 连接。
下面是详细的配置(Nginx 端口 80/443,Tomcat 的端口 8080):
Nginx 这一侧的配置没什么特别的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<? 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 中配置的一些安全策略会不起作用。
http://www.oschina.net/question/12_213459?fromerr=r6ad3Hjz
http://my.oschina.net/u/658145/blog/75093
相关推荐
详细说明了windows服务器nginx+tomcat+mysql部署及配置(配置阿里云后台安全组,配置域名)很适合新手学习 附件中包含: 1.操作说明文档 2.操作录屏 3.安装所用到的软件安装包 1)Windows Server 2019 数据中心版 ...
window版本,使用nginx+tomcat实现集群架构。包含http集群和https2钟方式集群,解压即可以用。证书什么都已经配置好了。如果商业证书直接替换就可以了。
Nginx+tomcat配置集群负载均衡实现动静分离实例
Nginx+tomcat+redis软负载均衡需要的一整套资源,还包括了JDK,依赖包等文件
自己做的一个nginx+tomcat+redis完成session共享小例子,包括所需jar,适合初学者,希望大家一起学习交流
本资源是一个 CentOS 下对 Nginx + Tomcat 配置 SSL 实现服务器 / 客户端双向认证配置示例。详细如何配置请参考博客《图文:CentOS 下对 Nginx + Tomcat 配置 SSL 实现服务器 / 客户端双向认证》,地址是:...
linux下Nginx+tomcat整合的安装与配置
Nginx+Tomcat+Memcached共享session集群配置
Nginx+tomcat+ssl安装配置手册.pdf
基于window版本下,使用nginx+tomcat搭建好的集群架构,解压既可以使用。 nginx使用的是当前最新版本(1.7.0),memcached for windown版本是1.4.4,也是目前最新版本。 包含了http的集群环境,https的集群环境,同时...
Nginx+KeepAlived+Tomcat负载架构 这个可以实现tomcat集群,并且可以使服务器主备机进行切换。如果其中一台机器当机,会自动切换到另一台机器。客服端感受不到服务器当掉。非常实用。
Nginx+Tomcat+Memcached实现tomcat集群和session共享 nginx配置
keepalived+nginx+tomcat+redis+mysql所需的jdk包,之前csdn不让上传超过200m得只能分开上传。
Nginx+keepalived+tomcat实现性负载均衡
keepalived+Nginx+Tomcat负载均衡配置文档,生产实施原文档,欢迎大家参考。
nginx1.6的安装 tomcat7的安装(包括jdk7) nginx+tomcat反向代理配置
ubuntu+nginx+tomcat 实现负载匀衡
基于nginx+tomcat+memcache的负载均衡架构
基于tomcat7版本的memcached会话保持,内置tomcat需要的jar包。
负载均衡nginx+tomcat+terracatta+nfs+mysql