今天在用nginx代理tomcat的时候,ssl出现的问题,nginx使用443(https),tomcat使用80(http)。
在重定向时会出现以上问题导致页面资源文件加载不出来。这是因为tomcat不知道nginx发来的是http还是https。
默认情况下,nginx得到的https的访问会以http的方式发给负载的tomcat。
我们先给nginx配置
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和tomcat配置 X-Forwarded-Proto 就是为了正确地识别实际用户发出的协议是 http 还是 https。
X-Forwarded-For 是为了获得实际用户的 IP。