Skip to content

Nginx+SSL+Tomcat 后端获取正确协议方法

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;   # 添加此行

后台获取正确协议

方法一

后台通过request.getHeader(“X-Forwarded-Proto”)获取真实的scheme

方法二

Tomcat 配置 server.xml ,Engine 模块下配置一个 Valve

<Valve className="org.apache.catalina.valves.RemoteIpValve" 
remoteIpHeader="X-Forwarded-For" 
protocolHeader="X-Forwarded-Proto" 
protocolHeaderHttpsValue="https"/>

配置双方的 X-Forwarded-Proto 就是为了正确地识别实际用户发出的协议是 http 还是 https,这样就可以request.getScheme()获取正确的结果了,就像用户在直接访问 Tomcat 一样。

Published in系统运维

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注