
知识是人生的灯塔,只有不断学习,才能照亮前行的道路
📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 🚀,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,收藏学习不迷路 😋 。
0x00 前言简述
首先声明,此文并非广告,也不是为阿里云打广告的文章(PS: 若需投放广告请联系作者,生活所迫), 而是作者在免费(Free)使用阿里云边缘安全加速ESA(Edge Security Acceleration)过程中的一些心得分享,它切实解决了作者内部业务运维安全的一些痛点、难点问题,遂简单整理出来,给遇到同样问题的道友提供一个解决思路。
-
例如:内网业务通过物理的负载均衡设备四层转发到公网,但是无法获取真实的用户IP地址, 从而导致无法进行有效的用户追踪、溯源等,而依托于阿里云 ESA 边缘安全加速基础,可以解决此问题。

-
例如:其次在前面实践 Nginx geoip2 模块是依托于 GeoIP2 数据库根据IP地址获取用户IP省份位置,其准确性不高,且无法实时更新,而依托于阿里云 ESA 边缘安全加速函数,则可以完美解决这些问题。

原文地址:https://articles.zsxq.com/id_5ou2v4j8tbzs.html
什么是 ESA ?
阿里云的边缘安全加速 ESA(Edge Security Acceleration)是一个全球分布式的边缘网络平台,它通过遍布全球的3200多个边缘节点,为游戏、电商、金融、媒体等行业提供一站式的网络加速、安全防护和边缘计算服务,旨在解决全球业务访问延迟高、网络攻击频发以及中心化计算带来的性能瓶颈问题。
ESA 产品免费套餐领取地址(复制或文末阅读原文链接直达):https://www.aliyun.com/product/esa?source=5176.29345612\&userCode=uelj47qf
weiyigeek.top-ESA 产品价格图
为什么选择ESA?
目前阿里云ESA提供了免费试用额度,首次使用赠送 50G(基础版,原价格 9.9/50G) + (每日10w次边缘计算能力) ,目前还可参加任务无限免费领取基础版,这对于小型企业和开发者来说是一个非常有吸引力的选择。通过使用ESA,用户可以享受到全球分布式的边缘节点带来的低延迟和高可用性,同时还可以利用其内置的安全防护功能来抵御各种网络攻击,以基础版功能为例:
-
100%CDN功能,加量不加价
-
一键防盗刷
-
支持用量封顶,安心使用
-
拦截流量不计费
-
HTTPS、WAF请求数不计费,仅计算请求+响应流量。
weiyigeek.top-ESA架构图
应用场景
-
全球化业务加速:对于业务覆盖多个国家和地区的企业,如跨境电商、全球化游戏、出海应用等,用户访问延迟和网络安全是核心挑战。
-
高并发应用的边缘计算:对于需要快速响应用户请求的场景,如实时API、在线个性化推荐、物联网数据处理等,将计算逻辑部署在靠近用户的边缘节点可以有效降低回源延迟。
-
业务安全防护:对于频繁遭受DDoS攻击、CC攻击或流量盗刷的业务,如金融、游戏、政府网站等,需要强大的安全防护能力来保障业务连续性。
废话不多说,实践为王,来看看作者是如何使用 esa 解决上述问题的吧。
0x01 实践操作
1.自定义真实IP地址请求头获取客户端地址
操作步骤
01.使用浏览器访问[ https://www.aliyun.com/product/esa?source=5176.29345612\&userCode=uelj47qf ] esa 产品地址申请免费试用。
weiyigeek.top-阿里云ESA图
02.点击边缘安全加速(ESA)控制台, 站点管理添加一个自己的主域名,例如: 作者的 weiyigeek.top 目前托管在腾讯云中,需要自行在域名解析商那边添加 TXT 记录以验证所属
weiyigeek.top-添加站点图
03.之后,为站点选择免费试用套餐基础版/1个月,原价也只有 9.9/50G,点击完成并支付即可。
weiyigeek.top-选择ESA套餐图
04.完成后点击添加的【站点】,点击【DNS】,为测试站点 test.weiyigeek.top 添加一个 CNAME 记录,注意同样需要在域名解析商按照提示配置即可。
weiyigeek.top-添加DNS记录图
05.虽然,默认加入到 esa 的 test.weiyigeek.top 站点,可以通过 $http_x_forwarded_for 头进行获取,但是考虑到在实践场景中有需要自定真实IP记录头的需要,ESA 也是支持的这里有两种方式可以实现。
方式1.规则 > 转换规则 > 修改请求头 > 设置域名与请求路径条件,例如:在访问 test.weiyigeek.top/ip 时请求头设置为 x-real-ip。
weiyigeek.top-修改请求头图
方式2.规则 > 转换规则 > 托管转换 > 添加真实客户端 IP 标头 ,例如:设置为 real-client-ip。
weiyigeek.top-添加真实客户端 IP 标头图
06.之后,我们便可到 nginx 服务器中配置,添加一个 test.weiyigeek.top 站点,并添加下述部分 location 配置,
go
location = /ip {
default_type application/json;
# 禁止 OPTIONS 方式请求
if ($request_method ~* ^(OPTIONS)$) {
access_log off;
return 204;
}
# 仅允许 GET|POST 方式请求
if ($request_method !~* ^(GET|POST)$) {
return 405;
}
# 限制请求来源,防止盗刷
valid_referers blocked *.weiyigeek.top *.wygk.eu.org localhost:80 localhost:8080;
if ($invalid_referer) {
return 403;
}
return 200 '{"code":0, "data": {"x-real-ip":"$http_x_real_ip","x-forwarded-for":"$http_x_forwarded_for","real-client-ip": "$http_real_client_ip"},"success": true}';
}
weiyigeek.top-配置nginx站点图
07.尝试使用浏览器访问 test.weiyigeek.top/ip ,由于做了referer 来源限制所以直接请求 403 ,防止其它站点盗刷。
weiyigeek.top-防止被盗刷的安全限制图
08.最后加上 referer: demo.weiyigeek.top 请求头字段与值,再次访问发现已经可以通过 $http_real_client_ip 或 $http_x_forwarded_for 以及 $http_x_real_ip 等 Nginx 变量获取到真实的客户端 IP 地址了。
weiyigeek.top-正常返回客户端IP地址图
2.利用边缘函数实现获取客户端IP地址及地域信息
温馨提示:此处仍在上一小节中添加站点 以及 添加 DNS 记录 步骤之下继续进行实践,前面我们介绍 esa 时提到边缘计算作为其核心功能,可以在请求以及响应阶段,针对数据进行加工处理。
温馨提示:阿里云 ESA 边缘函数提供了每日 10w 次免费边缘计算能力,对于小型企业和开发者已经足够使用了。
操作步骤
01.回到【边缘安全加速 ESA】控制台,首次访问需申请开通,点击侧边栏中【边缘函数】,自定义添加一个边缘函数,例如:作者这里函数名称设置为 get-ip-info 。
weiyigeek.top-边缘函数图
02.将下述边缘函数代码复制到新创建的边缘函数中,其利用预定义对象 request.info 获取客户IP地址及相关运营商与地理位置信息,在进行测试确认无误后,便可保存发布,例如:
go
async function handleRequest(request) {
returnnew Response(JSON.stringify(request.info), {
headers: {
'content-type': 'application/json',
},
})
}
exportdefault {
async fetch(request) {
return handleRequest(request);
}
};
weiyigeek.top-修改边缘函数代码图
03.再次点击添加的站点,站点管理 > 函数路由 > 新创建一个路由,内容如下所示.
weiyigeek.top-创建访问路由图
04.配置完成后,便可直接访问 test.weiyigeek.top/ipinfo ,查看真实的客户端IP地址及其运营商和地理位置等信息了。
go
{
"ip_city_en": "Chongqing",
"ip_region_id": "CN-CQ",
"ip_country_id": "CN",
"ip_region_en": "Chongqing",
"ip_isp_en": "China-Mobile",
"ip_isp_id": "100025",
"ip_country_en": "China",
"remote_port": "2348",
"remote_addr": "183.226.218.**",
"ip_city_id": "500100"
}
weiyigeek.top-验证边缘函数获取地址信息图
至此,作者通过实践,已经成功利用阿里云边缘安全加速ESA实现了获取真实IP地址及其营运商、省份位置等信息的需求,希望对道友们有所帮助。

END
加入:作者【全栈工程师修炼指南】知识星球
『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。
Q: 加入作者【全栈工程师修炼指南】星球后有啥好处?
✅ 将获得作者最新工作学习实践文章以及网盘资源。
✅ 将获得作者珍藏多年的全栈学习笔记(需连续两年及以上老星球友,也可单次购买)
✅ 将获得作者专门答疑学习交流群,解决在工作学习中的问题。
✅ 将获得作者远程支持(在作者能力范围内且合规)。

获取:作者工作学习全栈笔记
作者整理了10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者微信或者回复【工作学习实践笔记】,当前价格¥299,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

知识推荐 往期文章
若文章对你有帮助,请将它转发给更多的看友,若有疑问的小伙伴,可在评论区留言你想法哟 💬!
