Hello社区成员,
我正在为我的电子商务网站使用ALB(应用程序负载均衡器)。在负载均衡器后面有两个ec2-linux实例,它们通过ALB获取客户端流量(两个ec2实例上都有web服务器tomcat7)。
我正在使用X-Forwarded-For标头来获取我的ec2-instances上的实际客户端IP,这在获取客户端IP方面工作正常。 我的70%客户端IP是实际的客户端IP,它正在访问我网站的支付页面(我正在我的电子商务网站上进行生产销售。)
30%的IP是AWS网络运营IP,就像下面的IP那些Ec2-network 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个示例网址 OrgName:亚马逊技术公司
所以我很困惑,为什么我得到亚马逊网络IP(这些亚马逊ec2网络IP是实际客户端和亚马逊ALB之间的路由器或这些IP是负载均衡器的IP而不是客户端IP:我的java代码如下所示获取客户端IP) 我是否应该使用亚马逊ALB上的aws waf阻止它们。 如果我阻止他们,我最终会失去实际的客户流量吗?
OR 为什么我在使用x-forward-for标头时没有获得客户端真实IP的30%的流量? 我的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标头是否提供空值
此致 Yugdeep
答案 0 :(得分:1)
这4个IP是亚马逊拥有的IP。我在这里看到两种可能性: