【安全解决方案】深入解析:如何通过CDN获取用户真实IP地址
一、业务场景
某大型互联网以及电商公司为了防止客户端获取到真实的ip地址,以及达到保护后端业务服务器不被网站攻击,同时又可以让公安要求留存网站日志和排查违法行为,以及打击犯罪的时候,获取不到真实的ip地址,发现网络安全问题对相关公司进行处罚或者警告。

CDN可以实现以下功能:
-
网站加速:CDN可以缓存静态网页内容(如HTML、CSS、JavaScript文件)以及图片和视频等静态媒体文件,并将其分发到全球各地的边缘节点,从而加速网页加载速度,提升用户体验。
-
下载加速:对于大文件的下载和分发,如游戏安装包、应用更新、手机ROM升级等,CDN通过其分布式节点网络加速下载过程,降低下载时间,提升用户体验。
-
视频点播和直播加速:CDN提供高效的流媒体分发,将视频内容快速传输给全球观众,减少视频卡顿和加载时间,提升观看体验。
-
移动应用加速:CDN可以为移动APP更新文件(apk文件)分发,移动APP内图片、页面、短视频、UGC等内容的优化提供加速分发效果。
-
电子商务平台加速:电商平台在面对高流量和高并发访问时,CDN能够提供网站加速及SSL加速,优化移动设备访问效果,增强网站安全防护能力,提高网站服务的可用性。
-
游戏加速:在线游戏对延迟要求较高,CDN通过降低游戏的加载时间和网络延迟,提高游戏的流畅度和稳定性。
-
安全防护:CDN提供一定程度的分布式拒绝服务(DDoS)攻击防护能力,由于CDN的分布式架构,可以对来自恶意请求的攻击进行过滤和缓解,确保正常用户访问不受干扰。
-
降低成本:通过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后台,使后端服务器能够获取到前端用户的真实请求地址。
相关文章:
【安全解决方案】深入解析:如何通过CDN获取用户真实IP地址
一、业务场景 某大型互联网以及电商公司为了防止客户端获取到真实的ip地址,以及达到保护后端业务服务器不被网站攻击,同时又可以让公安要求留存网站日志和排查违法行为,以及打击犯罪的时候,获取不到真实的ip地址,发现…...
git 免密的方法
方法一: 通过生成credential配置 git config --global credential.helper store 查看.gitconfig文件,发现多了一行 [credential] helper store 方法二: 修改仓库中.git/config文件 url http://账号:密码git.test.com.cn/test/xx.git或者带…...
如何用 obdiag 排查 OceanBase数据库的卡合并问题——《OceanBase诊断系列》14
1. 背景 卡合并在OceanBase中是一个复杂的问题,其产生可能源于多种因素。目前,对于卡合并的明确界定尚不存在统一标准,一方面,我们界定超过36小时未完成合并为合并超时,此时RS会记录ERROR日志;另一方面&am…...
hackme靶机渗透流程
一,搭建环境 本次测试使用hackme的靶机 攻击为kali(192.168.30.130)与物理机 二,信息收集 1.确定IP 先确定mac信息,再搭配主机扫描确定靶机的IP地址 00:0C:29:D0:F5:74 确定靶机地址为 192.168.30.133 2.扫描靶机…...
uniapp 常用的地区行业各种多选多选,支持回显,复制粘贴可使用
uniapp 常用的地区行业各种多选多选,支持回显 必须导入uni-popup 弹出层 该组件 1.目前项目开发中使用到这类似挺多的,记录一下,方便以后是使用 2.使用前提,目前不做无限级,只支持二维数组,模板里只循环了两…...
iOS 本地存储地址(位置)
前言: UserDefaults 存在沙盒的 Library --> Preferences--> .plist文件 CoreData 存在沙盒的 Library --> Application Support--> xx.sqlite 一个小型数据库里 (注:Application Support 这个文件夹已开始是没有的,只有当你写了存储代码,运行之后,目录里才会出…...
uni.showLoading 时禁止点击(防止表单重复提交) 小程序调取微信支付
在使用 uni.showLoading 时,如果需要禁用点击事件,可以在调用 uni.showLoading 之前设置全局的触摸事件为禁用状态,然后在 uni.hideLoading 之后再重新启用。 mask 选项是 uni.showLoading 的一个参数,当设置为 true 时,会显示遮罩,此时用户不能点击底层的任何内容。 // …...
OpenClash与Tailscale冲突得问题
1.问题描述:开了openclash之后,tailscale就用不了。tailscale ping XXX.XXX.XXX.XXX 可以成功。但是用cmd的ping就不通。 2.tailscale登录得时候,加上这两个参数:--accept-dnsfalse 和 --netfilter-modeoff 。 示例:t…...
day02|计算机网络重难点之HTTP请求报文和响应报文
day02|计算机网络重难点之HTTP请求报文和响应报文 3.HTTP请求报文和响应报文是怎样的,有哪些常见的字段? 3.HTTP请求报文和响应报文是怎样的,有哪些常见的字段? HTTP请求报文主要是由 请求行、请求头部、空行和请求体 四部分组成…...
Flutter之build 方法详解
前言 我们创建一个Flutter程序,入口文件内容如下 //导包,此行代码作用是导入了 Material UI 组件库。Material (opens new window)是一种标准的移动端和 web 端的视觉设计语言, Flutter默认提供了一套丰富的 Material 风格的 UI 组件。 impo…...
开源呼叫中心系统与商业软件的对比
开源呼叫中心系统与商业软件的对比 作者:FreeIPCC 在当今的商业环境中,呼叫中心系统已成为企业与客户之间沟通的重要桥梁。而在选择呼叫中心系统时,企业面临着两种主要的选择:开源呼叫中心系统和商业软件。这两种系统各有其独特的…...
【人工智能】——matplotlib教程
文章目录 1.matplotlib简介2.基本绘图功能2.1给图形添加辅助功能2.2在一个坐标系中绘制多个图像2.3多个坐标系显示图像 3.常见图像绘制 1.matplotlib简介 matplotlib 是一个用于创建二维图表和数据可视化的 Python 库,它提供了一种类似于 MATLAB 的绘图接口。matplo…...
【c++ gtest】使用谷歌提供的gtest和抖音豆包提供的AI大模型来对代码中的函数进行测试
【c gtest】使用谷歌提供的gtest和抖音豆包提供的AI大模型来对代码中的函数进行测试 下载谷歌提供的c测试库在VsCode中安装抖音AI大模型找到c项目文件夹,使用VsCode和VS进行双开生成gtest代码进行c单例测试 下载谷歌提供的c测试库 在谷歌浏览器搜索github gtest, 第…...
使用Angular构建动态Web应用
💖 博客主页:瑕疵的CSDN主页 💻 Gitee主页:瑕疵的gitee主页 🚀 文章专栏:《热点资讯》 使用Angular构建动态Web应用 1 引言 2 Angular简介 3 安装Angular CLI 4 创建Angular项目 5 设计应用结构 6 创建组件…...
25届电信保研经验贴(自动化所)
个人背景 学校:中九 专业:电子信息工程 加权:92.89 绩点:3.91/4.0 rank:前五学期rank2/95,综合排名rank1(前六学期和综合排名出的晚,实际上只用到了前五学期) 科研…...
大数据-190 Elasticsearch - ELK 日志分析实战 - 配置启动 Filebeat Logstash
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
不同类型的 LED 驱动电源在检测方法上有哪些不同?-纳米软件
1.传统 LED 驱动电源检测方法: 通常会提取 LED 驱动电源性能指标参数中较为重要的几个因子,如电压稳定性、电流波动范围等。利用诸如 k-means 聚类分析方法,实现对不同厂家、使用寿命不同的 LED 驱动电源快速有效的分类2。这种方法主要是通过…...
android 生成json 文件
在做网络请求的时候需要生成一个如下的json文件: {"messages": [{"role": "user","content": [{"type": "image_base64","image_base64": "pp"},{"type": "text&…...
C++新增的类功能和可变参数模板
C新增的类功能和可变参数模板 新的类功能默认成员函数 可变参数模板模拟实现emplace_back 🌏个人博客主页: 个人主页 新的类功能 默认成员函数 原来C类中,有6个默认成员函数: 构造函数析构函数拷贝构造函数拷贝赋值重载取地址…...
redo log 日志 与 undo log 日志工作原理
目录标题 1. redo log 日志2. undo log 日志3.总结 1. redo log 日志 redo log日志是 MySQL 数据中的重要日志之一,其本质是物理日志,存放于 数据库的数据目录中 ,名称为: ib_logfile 。它的功能主要是用于存放脏数据的日志&…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
