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

embedded/2024/12/27 8:17:24/

一、业务场景

某大型互联网以及电商公司为了防止客户端获取到真实的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地址。配置示例如下:

 ```nginxhttp {# 设置可信的代理服务器IPset_real_ip_from  0.0.0.0/0;# 设置从哪个请求头获取真实IPreal_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后台,使后端服务器能够获取到前端用户的真实请求地址。


 


http://www.ppmy.cn/embedded/133990.html

相关文章

Vue3 学习笔记(十二)侦听器详解

在 Vue 3 中,侦听器是一种响应式特性,允许你观察和响应 Vue 实例上的数据变动。Vue 提供了 watch 和 watchEffect 两个函数来创建侦听器。 1、watch 侦听器 watch 是一个用于侦听特定数据源变化的函数。它允许你指定一个或多个数据源,并在这些…

每天五分钟深度学习框架pytorch:从底层实现一元线性回归模型

本文重点 本节课程我们继续搭建一元线性回归模型,不同的是这里我们不使用pytorch框架已经封装好的一些东西,我们做这个目的是为了更加清楚的看到pytorch搭建模型的本质,为了更好的理解,当然实际中我们还是使用pytorch封装好的一些东西,不要重复造轮子。 模型搭建 #定义…

DAY67WEB 攻防-Java 安全JNDIRMILDAP五大不安全组件RCE 执行不出网

知识点: 1、Java安全-RCE执行-5大类函数调用 2、Java安全-JNDI注入-RMI&LDAP&高版本 3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j Java安全-RCE执行-5大类函数调用 Java中代码执行的类: Groovy Runti…

用Pyhon写一款简单的益智类小游戏——2048

文字版——代码及讲解 代码—— import random# 初始化游戏棋盘 def init_board():return [[0] * 4 for _ in range(4)]# 在棋盘上随机生成一个2或4 def add_new_tile(board):empty_cells [(i, j) for i in range(4) for j in range(4) if board[i][j] 0]if empty_cells:i,…

AMD锐龙8845HS+780M核显 虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)

最近买了机械革命无界14X,CPU是8845HS,核显是780M,正好macOS 15也出了正式版,试试兼容性,安装过程和之前差不多,这次我从外网获得了8核和16核openCore,分享一下。 提前发一下ISO镜像地址和open…

Java面试经典 150 题.P88. 合并两个有序数组(001)

本题来自:力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解 class Solution {public void merge(int[] nums1, int m, int[] nums2, …

java.sql.SQLException: ORA-00971: 缺失 SET 关键字

目录 背景: 过程: 错误原因: 解决办法: 总结: 背景: 正在运行某个项目程序,提交信息之后发现库中并没有刚刚的相关数据,后来查看后台信息,发现提示错误,java.sql.SQLException…

音视频同步版本【基于音频】

其实和基于外部时钟的原理操作基本上一模一样。只不过音频帧不需要去匹配现实时钟了,只有视频帧需要匹配现实时钟。而视频帧需要去匹配音频帧的时间,那么就需要给时钟设置一个补偿,因为现在是以音频帧为标准。假如现在现实时钟到了50pts&…