AWS Application Load Balancer

时间:2018-01-06 09:16:00

标签: amazon-web-services tomcat amazon-ec2 elastic-load-balancer

我的tomcat应用程序未从AWS Application负载均衡器接收X-Forwarded-For标头。负载均衡器配置为卸载SSL并通过HTTP与tomcat应用程序连接。我正在接收其他标头,例如x-forwarded-proto,x-forwarded-port,x-amzn-trace-id。我试图找到客户端的IP地址但现在坚持下去。我还检查了我收到的所有标题,以找出客户端的IP地址,但它不存在。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

这可能与tomcat配置有关。检查在tomcat中是否有以下配置来处理X-Forwarded-ForX-Forwarded-proto标题

<filter>
    <filter-name>RemoteIpFilter</filter-name>
    <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
    <init-param>
      <param-name>protocolHeader</param-name>
      <param-value>x-forwarded-proto</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>RemoteIpFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>

以下是配置参考:https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Basic_configuration_to_handle_&#39; x-forwarded-for&#39; &#39; x-forwarded-proto&#39; < / p>

您可以在$CATALINA_BASE/conf/web.xml或应用程序的WEB-INF / web.xml中找到配置文件

  

Tomcat提供了许多可以配置使用的过滤器   所有使用$ CATALINA_BASE / conf / web.xml的Web应用程序或可能是   通过在中配置各个Web应用程序来配置它们   应用程序的WEB-INF / web.xml。

答案 1 :(得分:0)

感谢Anuruddha&amp;汤姆快速反应。它工作得很好。对于那些在春季启动应用程序中使用java配置的人,需要添加RemoteIpFilter bean才能使其正常工作。然后可以使用httpServletRequest.getRemoteAddr()检索客户端IP地址。

@Configuration
public class ServletFilterConfig {

    @Bean
    public RemoteIpFilter remoteIpFilter() {
        return new RemoteIpFilter();
    }

}