您好社区成员,
我正在为我的电子商务网站使用 ALB(应用程序负载均衡器)。在负载均衡器后面有两个 ec2-linux 实例,它们通过 ALB 获取客户端流量(两个 ec2 实例上都有 Web 服务器 tomcat7)。
我正在使用 X-Forwarded-For 标头来获取我的 ec2 实例上的实际客户端 IP,这在获取客户端 IP 方面工作正常。我 70% 的客户端 IP 是访问我网站的支付页面的实际客户端 IP(我正在我的电子商务网站上进行产品销售。)
30% 的 IP 是 AWS 网络操作 IP,就像下面的 ip 那些 Ec2 网络 IP 也在访问我网站的付款页面(但我没有从这些亚马逊网络 IP 获得任何生产销售)
https://www.whois.com/whois/54.175.230.41
https://www.whois.com/whois/34.234.97.242
https://www.whois.com/whois/52.91.159.209
https://www.whois.com/whois/34.224.173.149
请在此处查看以上 4 个示例 URL 组织名称:Amazon Technologies Inc.
组织技术名称:Amazon EC2 网络运营
所以我很困惑为什么我得到亚马逊网络IP(这些亚马逊ec2网络IP是实际客户端和亚马逊ALB之间的路由器还是这些IP是负载均衡器的IP而不是客户端IP:我的java代码在下面给出以获取客户端IP )我是否应该在亚马逊 ALB 上使用 aws waf 阻止它们。如果我阻止他们,我最终会失去实际的客户流量吗?
或者为什么我在使用 x-forward-for 标头时没有获得所有流量的 30% 的客户端真实 IP?我的Java代码是:
public static String getClientIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
我只想保存实际访问我网站的真实客户端 IP(使用 x-forward 标头)。X-Forward 标头是否提供空值?
问候, 尤格迪普