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