在使用阿里云CDN时,获取访客的真实IP地址是许多开发者和运维人员面临的一个常见挑战。由于CDN的存在,直接通过REMOTE_ADDR获取的IP地址实际上是CDN节点的IP地址,而非访客的真实IP。这时,很多人会选择获取HTTP_X_FORWARDED_FOR头部信息,但由于这个字段容易被伪造,这样的做法存在一定的风险。为了解决这个问题,阿里云提供了一种更为安全和可靠的方式来获取访客的真实IP地址。

阿里云CDN中的访客IP获取

阿里云在CDN节点回源请求时,会将访客的真实IP地址添加到Header中,并且使用的是Ali-Cdn-Real-Ip这个字段。通过使用这个字段,我们可以准确地获取到访客的真实IP地址,而不必担心伪造的问题。

Nginx配置实现获取真实IP

为了在不修改后端程序的情况下,使Nginx能够直接将阿里云CDN回源请求中的访客真实IP地址赋值给REMOTE_ADDR,我们可以在Nginx的http节点中添加以下配置:

real_ip_header Ali-Cdn-Real-Ip;
set_real_ip_from 0.0.0.0/0;
  • real_ip_header Ali-Cdn-Real-Ip;:这条配置指示Nginx从Ali-Cdn-Real-Ip头部获取真实IP地址,并将其赋值给REMOTE_ADDR
  • set_real_ip_from 0.0.0.0/0;:这条配置的作用是允许从任何IP地址段获取真实IP地址。由于目前尚未找到阿里云CDN的IP地址段,所以这里暂时设置为0.0.0.0/0

如图所示,此处使用宝塔nginx作为示例:

总结

通过上述Nginx配置,我们能够轻松获取到通过阿里云CDN访问的访客真实IP地址,且无需对后端程序做任何修改。这种方法不仅简单高效,还可以有效防止通过HTTP_X_FORWARDED_FOR头部获取IP时可能出现的伪造问题,确保系统获取到的是真实的访客信息。

在实际应用中,建议后续根据阿里云官方提供的CDN IP地址段来进一步优化set_real_ip_from的配置,以提高系统的安全性。