当前位置: 首页 > news >正文

【安全解决方案】深入解析:如何通过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地址。配置示例如下:

 ```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 。它的功能主要是用于存放脏数据的日志&…...

go语言结构体与json数据相互转换

本博文简要介绍go语言结构体如何与json格式化字符串相互转换。 文章目录 go语言结构体转换为json数据json数据转换为go结构体 go语言结构体转换为json数据 type Person struct {Name string json:"name"Age int json:"age"Hobbies []strin…...

jenkins 自动化部署Springboot 项目

一、安装docker 1.更新yum命令 yum -y update2.查看机器有残留的docker服务,有就卸载干净 查看docker 服务 rpm -qa |grep docker卸载docker sudo yum remove docker-ce docker-ce-cli containerd.io sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/contai…...

使用xml发送国际短信(smspro)【吉尔吉斯斯坦】

//使用xml格式发送国外短信验证码【吉尔吉斯斯坦】官网:https://smspro.nikita.kg/ public function api_test($data,$user){$url "http://smspro.nikita.kg/api/message";$code 123456 ;$content Your verification code 123456, this verification …...

springmvc-springsecurity-redhat keycloak SAML2 xml实现

环境准备: jdk17 redhat keycloak 24 spring security 6 参照文档: 红帽KeyCloak:Red Hat build of Keycloak | Red Hat Product Documentation 入门指南:入门指南 | Red Hat Product Documentation 服务器管理指南&#x…...

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中,Pod 的状态为 CrashLoopBackOff 表示某个容器在启动后崩溃,Kubernetes 尝试重启该容器,但由于持续崩溃,重启的间隔时间逐渐增加。下面将详细介绍 CrashLoopBackOff 状态的原因、解决方案及相关命令的输出解释。 …...

Linux: Shell编程入门

Shell 编程入门 1 ) Shell 概念 shell 是 在英语中 壳, 外壳的意思可以把它想象成嵌入在linux这样的操作系统里面的一个微型的编程语言不像C语言, C 或 Java 等编程语言那么完整,它可以帮我们完成很多自动化任务例如保存数据监测系统的负载等等,我们同样…...

python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)

文章目录 1、任务目标2、网页分析3、代码编写 1、任务目标 目标网站:B站视频(https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a),用于本文测验 要求:抓取该网址下的视频&…...

容灾与云计算概念

​​​​​​基础知识容灾备份——备份技术系统架构与备份网络方案-CSDN博客 SAN,是storage area network的简称,翻译过来就是存储区域网络。 顾名思义,SAN首先是一个网络,其次它是关于存储的,区域则是指服务器和存储资…...

基于 Python 的自然语言处理系列(44):Summarization(文本摘要)

在这一部分中,我们将探讨如何使用 Transformer 模型将长文档压缩为摘要,这个任务被称为文本摘要。文本摘要是 NLP 领域中最具挑战性的任务之一,因为它需要理解长篇文本并生成连贯的总结,捕捉文档中的核心主题。然而,当…...

RabbitMQ安装部署

安装Erlang 由于RabbitMQ是用Erlang语言编写的,所以在安装RabbitMQ之前需要安装Erlang 安装依赖 [rootpro-ex ~]yum install make gcc gcc-c build-essential openssl openssl-devel unixODBC unixODBC-devel kernel-devel m4 ncurses-devel设置Eralng的存储库 […...

珠海移动app开发公司/什么是搜索引擎优化推广

2011-06-18 回答这个程序所用的文件名可以直接从命令行给出,例如生成了a.exe文件,那么:a.exeb.txt执行这个命令行,程序就会统计b.txt.文件中的字母数量。学习编程就像学数学,最重要的就是自己独立思考,像这…...

新浪云 wordpress/seo作弊

题目描述&#xff1a; 在一个字符串(1<字符串长度<10000&#xff0c;全部由大写字母组成)中找到第一个只出现一次的字符。 如输入 abaccdeff&#xff0c;则输出 b。 输入&#xff1a; 输入有多组数据  每一组输入一个字符串。 输出&#xff1a; 输出第一个只出现一次的…...

短视频营销的优势和劣势/搜外seo视频 网络营销免费视频课程

本文实例为大家分享了centos yum安装mysql 5.6的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下1.检查系统是否安装其他版本的mysql数据#yum list installed | grep mysql#yum -y remove mysql-libs.x86_642.安装及配置# wget http://repo.mysql.com/mysql-communit…...

网站建设合同印花税税目/外贸找客户有什么网站

1、非root用户&#xff0c;先在home目录下载 wget https://storage.googleapis.com/golang/go1.7.3.src.tar.gz 2、解压包 tar -xzf go1.7.3.linux-amd64.tar.gz 3、如果没.profile&#xff0c;就创建$HOME/.profile文件&#xff0c;加入环境变量 export GOROOT$HOME/goexport …...

做网站做软件怎么赚钱吗/全自动推广软件

1.输出函数 - print 用法一&#xff1a;print(数据) 在控制台打印指定数据&#xff0c;打印结束后会自动换行 print(你好世界)用法二&#xff1a;print(数据1&#xff0c;数据2&#xff0c;数据3&#xff0c;…) 一行同时打印多个数据&#xff0c;每个数据空格隔开&#xf…...

教育网站 php/免费发链接的网站

启动失败IDLE使用套接字在IDLE GUI进程和用户代码执行过程之间进行通信。无论何时Shellstart或重新启动&#xff0c;都必须建立连接。(后者用分隔线表示’RESTART’)。如果用户进程无法连接到GUI进程&#xff0c;则会显示一个失败的常见原因是用户编写的文件与标准库模块同名&a…...