可能文章标题写的不够明白
介绍下出现的情况:
系统部署在tomcat下,nginx做转发代理,浏览器通过地址先访问到nginx,然后nginx再去请求tomcat,将内容返回给浏览器。
由于nginx对外需要https访问,而nginx访问tomcat的时候是使用http,可能会造成在浏览器加载静态文件的时候可能还是http协议,造成无法加载。
- nginx配置如下:
server {
listen 443 ssl;
server_name b.itapes.cn;
root html;
index index.html index.htm;
ssl_certificate cert/2578177_b.itapes.cn.pem;
ssl_certificate_key cert/2578177_b.itapes.cn.key;
#ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#ssl_ciphers HIGH:!aNULL:!MD5;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host:$server_port;
proxy_pass http://127.0.0.1:8443;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#$scheme是将访问的协议传递给tomcat
proxy_set_header X-Forwarded-Proto $scheme;
}
以上配置主要是proxy_set_header X-Forwarded-Proto $scheme;
,这样的话在tomcat中运行的项目可以通过request来获取到当前使用的协议
proxy_pass http://127.0.0.1:8443;
中127.0.0.1
为tomcat所在服务器的ip,8443
为tomcat的http端口
- tomcat配置
主要在server.xml中进行配置,选取部分内容如下:
<Engine name="Catalina" defaultHost="localhost">
<Valve className="org.apache.catalina.valves.RemoteIpValve"
internalProxies="127\.0\.0\.1"
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto"
protocolHeaderHttpsValue="https"
httpsServerPort="443"
/>
</Engine>
以上配置中Value
为主要内容,需要添加在Engine
节点下,
internalProxies
为nginx所在服务器的ip
httpsServerPort
为nginx对外https的端口
根据之前项目部署过程中,使用以上配置即可解决出现的问题