nginx代理https后,应用redirect https变成http,很多页面报404。情况类似http://blog.sina.com.cn/s/blog_56d8ea900101hlhv.html这篇文章中的描述。
解决办法:除了nginx配置SSL,在tomcat中也配置SSL。
tomcat配置:
<Connector port="9443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="conf/ssl/xxxxxxxxx.jks" keystorePass="password"
maxThreads="150" scheme="https" secure="true"
keystoreFile="conf/ssl/xxxxxxxxx.jks" keystorePass="password"
clientAuth="false" sslProtocol="TLS" />
#端口号可以自定义。
#keystoreFile指向刚才的jks文件
#keystorePass值为jks密码,就是下面第二步里设置的密码。
#这里重点要说明下jks证书生成的方法:
1、获取生成jks文件的需要的文件。这里需要2个文件,1个是私钥文件,另外一个是证书文件。
2、用第一步里的2个文件到以下站点生成一个jks文件
https://www.ssltools.org/certificate-convert.htm
所填项如下:
源格式 pem
目标格式 jks
证书文件 选择第一步里的server.crt
私钥文件 选择第一步里的 key.txt
Pem私钥密码 不填
密钥库密码和确认密码 自己设置一个,不加特殊符号,一会配置文件里用到(如server.xml)
提交后就能或者一个你们域名的jks文件(注意jks要5KB左右才是正确的,2KB左右的链不完整)
3、把jks上传到java容器在的服务器上,路径只要不是webapps下就可以,然后到conf目录下server.xml里配置。
nginx的配置:
#红色地方是重点
http {
.....
upstream admin{
server 10.173.18.246:9443;
}
.....
server {
listen 443;
.....
location ~* ^/admin/.*.(do|jsp)$ {
proxy_pass https://admin;
proxy_redirect off;
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 Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}