1

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

4

2 回答 2

3

这取决于您所说的“真实请求 IP”是什么意思。如果您谈论的是从那里返回的值,request.getRemoteAddr()那么是的,这是可能的。
这样做的方法是在您的 Web 应用程序中设置一个 servlet 过滤器,该过滤器将拦截所有 URL(或仅拦截您希望返回 X-REAL-IP 的 URL),并让该过滤器将传入请求包装到其后代HttpServletRequestWrapper中将覆盖getRemoteAddr()以返回 X-REAL-IP 值。

于 2009-07-26T23:21:32.623 回答
2

您可以使用 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.

于 2015-07-28T19:34:39.217 回答