在使用阿里云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
的配置,以提高系统的安全性。