欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx 配置ssl 3种方式 nginxtomcatscheme应用服务器 

程序员文章站 2024-01-09 16:05:04
...

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");