关于java web apps和X-REAL-IP header的问题

时间:2009-07-26 21:41:16

标签: java tomcat nginx

我正在为客户设置一个项目演示。在我的服务器上,我有很多使用不同技术构建的站点,这些站点在不同端口的不同服务器上运行。我正在使用nginx作为所有这些的反向代理。这个特殊的应用程序是用java(spring MVC / Blazeds)构建的,并将在tomcat 6下部署用于演示(也可能在生产中)。当用作反向代理时,Nginx具有很好的设置,使其能够在X-REAL-IP头中传递原始请求的IP地址。我想要做的是设置我的应用程序或至少tomcat将X-REAL-IP标头视为真实的请求IP地址。这可能吗?

2 个答案:

答案 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