Bootstrap

【安全解决方案】深入解析:如何通过CDN获取用户真实IP地址

一、业务场景

某大型互联网以及电商公司为了防止客户端获取到真实的ip地址,以及达到保护后端业务服务器不被网站攻击,同时又可以让公安要求留存网站日志和排查违法行为,以及打击犯罪的时候,获取不到真实的ip地址,发现网络安全问题对相关公司进行处罚或者警告。

CDN可以实现以下功能:

  1. 网站加速:CDN可以缓存静态网页内容(如HTML、CSS、JavaScript文件)以及图片和视频等静态媒体文件,并将其分发到全球各地的边缘节点,从而加速网页加载速度,提升用户体验。

  2. 下载加速:对于大文件的下载和分发,如游戏安装包、应用更新、手机ROM升级等,CDN通过其分布式节点网络加速下载过程,降低下载时间,提升用户体验。

  3. 视频点播和直播加速:CDN提供高效的流媒体分发,将视频内容快速传输给全球观众,减少视频卡顿和加载时间,提升观看体验。

  4. 移动应用加速:CDN可以为移动APP更新文件(apk文件)分发,移动APP内图片、页面、短视频、UGC等内容的优化提供加速分发效果。

  5. 电子商务平台加速:电商平台在面对高流量和高并发访问时,CDN能够提供网站加速及SSL加速,优化移动设备访问效果,增强网站安全防护能力,提高网站服务的可用性。

  6. 游戏加速:在线游戏对延迟要求较高,CDN通过降低游戏的加载时间和网络延迟,提高游戏的流畅度和稳定性。

  7. 安全防护:CDN提供一定程度的分布式拒绝服务(DDoS)攻击防护能力,由于CDN的分布式架构,可以对来自恶意请求的攻击进行过滤和缓解,确保正常用户访问不受干扰。

  8. 降低成本:通过CDN可以降低带宽和服务器的成本,提高用户体验的同时,降低网站运营成本。

CDN的应用可以显著提升用户访问速度,降低运营成本,提高源站安全性,降低被黑客攻击的风险,提高网站可靠性,降低故障影响范围。

而对于制造业,CDN可以用于产品展示视频、用户手册和软件更新的快速分发,以及支持远程监控和维护等工业物联网(IIoT)应用,提高数据传输效率和实时性。

在使用CDN服务时,后端服务器获取到的通常是CDN节点的IP地址,而不是用户的真实IP地址。,这就造成了公安要求留存网站日志和排查违法行为,以及打击犯罪的时候,获取不到真实的ip地址。

三、解决方案

所以为了获取用户的真实IP地址,我们可以采取以下几种方法:

1. 利用HTTP请求头部信息:CDN通常会在回源请求的HTTP头部中添加一些特殊的字段,如`X-Forwarded-For`或`X-Real-IP`,用以传递用户的真实IP地址。后端服务器可以通过检查这些头部字段来获取用户的真实IP。

在Nginx服务器中,可以配置`set_real_ip_from`指令来指定哪些IP地址是可信的代理服务器,并通过`real_ip_header`指令指定从哪个请求头中获取真实的IP地址。配置示例如下:

 ```nginx
   http {
       # 设置可信的代理服务器IP
       set_real_ip_from  0.0.0.0/0;
       # 设置从哪个请求头获取真实IP
       real_ip_header    X-Forwarded-For;
       # 开启递归查找,确保获取到所有经过CDN的IP地址
       real_ip_recursive on;
   }


   这样配置后,Nginx会从`X-Forwarded-For`头部中获取第一个非CDN节点的IP地址作为用户的真实IP。

2. 使用CDN提供的API或配置:一些CDN服务提供了API或配置选项,允许你获取用户的真实IP地址。例如,阿里云CDN提供了`Ali-CDN-Real-IP`头部参数,用于记录客户端的真实IP地址。在Nginx配置中,可以设置`proxy_set_header Ali-CDN-Real-IP $remote_addr;`来获取真实IP。

3. 修改后端服务器配置:在后端服务器(如Nginx)的配置文件中,可以添加特定的配置来解析从CDN传来的请求头,从而获取用户的真实IP。例如,可以设置`fastcgi_param REMOTE_ADDR $http_x_forwarded_for;`来将真实IP传递给后端应用。

4. 使用环境变量:在前端应用中,可以通过环境变量来配置API请求的基地址,从而确保请求能够正确地发送到后端服务器。例如,在React应用中,可以定义环境变量`REACT_APP_API_URL`,并在发送请求时使用这个变量作为API的基地址。

5. 利用配置文件:在前端代码中,可以读取配置文件(如JSON或YAML格式)来获取后端域名,然后使用这个域名进行API请求。

6. 通过服务器代理:在前端开发服务器(如使用Node.js和Express)上配置代理中间件,将前端请求转发到后端服务器,从而隐藏后端域名并解决跨域问题。

7. 动态生成域名:在某些情况下,可以根据当前环境或用户地理位置等信息动态生成后端域名。

通过上述方法,可以有效地配置CDN后台,使后端服务器能够获取到前端用户的真实请求地址。


 

;