我想在RemoteIpValve
网络服务器中使用tomcat8
。
问题:结果,request.remoteAddr
(之前是127.0.0.1)已使用外部呼叫ip更新。因此,RemoteAddrValve
拒绝了它,好像发生了外部直接访问一样。
问题:我如何仍将“真实的”外部IP转发给tomcat,让tomcat仅接受本地请求,还使用RemoteIpValve
?
Tomcat已配置为仅允许通过前面的apache2 proxy
进行本地访问:
context.xml
:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>
由于我仍然想读取实际请求,例如,如果它是http或https请求等,我将转发apache2中的这些字段,并使用以下命令在server.xml
中的tomcat中启用评估:
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" />
因此,本地主机请求之外的任何内容都将被403 forbidden
拒绝。这是因为tomcat替换了呼叫者的真实IP,而RemoteAddrValve
当然拒绝了。
我该如何预防?