我正在为客户设置一个项目演示。在我的服务器上,我有很多使用不同技术构建的站点,这些站点在不同端口的不同服务器上运行。我正在使用nginx作为所有这些的反向代理。这个特殊的应用程序是用java(spring MVC / Blazeds)构建的,并将在tomcat 6下部署用于演示(也可能在生产中)。当用作反向代理时,Nginx具有很好的设置,使其能够在X-REAL-IP头中传递原始请求的IP地址。我想要做的是设置我的应用程序或至少tomcat将X-REAL-IP标头视为真实的请求IP地址。这可能吗?
答案 0 :(得分:3)
这取决于“真实请求IP”的含义。如果您正在谈论从request.getRemoteAddr()
返回的值,那么是的,这是可能的
这样做的方法是在您的Web应用程序中设置一个servlet过滤器,它将拦截所有URL(或者只是您希望X-REAL-IP返回的URL),并将该过滤器请求传入请求到{的后代。 {1}}将覆盖HttpServletRequestWrapper
以返回X-REAL-IP值。
答案 1 :(得分:0)
您可以使用Tomcat的RemoteIpValve
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-REAL-IP"
requestAttributesEnabled="true"
internalProxies="127.0.0.1" />
这样,当您致电request.getRemoteAddr()
时,它将提供正确的信息。顺便说一句,您可能希望使用更标准的标头,即X-Forwarded-For
。