Nginx 配置ssl 3种方式 nginxtomcatscheme应用服务器
Nginx 配置ssl 证书,增加外层网络传输安全协议,而局域网内应用服务器配置不变;由https 协议请求访问到http协议应用服务器。
由于,两种传输协议的不同,导致从应用服务器获得的scheme是本地的http协议。而Web服务器提供是https协议。因此从页面获得图片、样式使用scheme方式获取不到资源。导致页面加载不到图片及样式。
解决方式,是更改页面获取图片及样式的方式。放弃用绝对路径,改用相对路径。这样jsp会一个有问题。当用redirect做请求转发的时候,javaweb会采用标准重新获取服务器所在环境,得到是http进行跳转而不是采用https协议。
解决方式一,是重写tomcat下catalina.jar包,org.apache.connector.Request. getScheme()方法,以及org.apache.connector.Request. getServerPort()方法。使其返回https协议类型及443端口。
解决方式二,是在nginx配置location中添加
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;
同时在tomcat配置文件server.xml中Engine 模块下添加
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>
解决方式三,是在nginx配置中添加server
server {
listen 80;
server_name http域名;
rewrite ^/(.*) https域名/$1 permanent;
}
使其,在发起http请求时,直接跳转到https中重新请求地址。(会发起两次请求)
另,解决IE跨域下不存储cookie的问题。
首先,检查域名不能包含特殊字符如:?/\;:@#$%^~_=+, 。<>只能是字母、数据及横杠才可以。
其次,在请求返回页面时,添加响应请求头:
response.addHeader("P3P", "CP=CAO PSA OUR");