来来来,手把手教你搭建四个lucky可用的IP查询接口
近期玩lucky的小伙伴们应该发现了,很多国内的公共IP查询接口网站接二连三的失效了,还在为lucky里没有稳定的IP查询接口发愁吗?来来来,今天手把手教你分别用cloudflare workers、腾讯edgeone边缘函数、阿里云ESA的函数和pages以及另外一个lucky的web服务四个方法搭建属于自己的ip查询接口,自用不失效!
有网友提到阿里云的esa也有函数和pages功能,那就新增一个esa的搭建接口教程,在文章第四部分。
一、大善人cloudflare的workers
我lucky里一直用的国内几个网站的IP查询接口,近期失效后第一个想到的就是用大善人的workers自己部署一个,以前没有搞过,但是觉得应该不难,就自己尝试了一下,发现果然不难。首先,你需要有一个cf账号,并且有一个托管在cf的域名,不再啰嗦,开始教程。没有cf账号或者没有托管在cf域名的,请先找教程去托管一个域名,买的域名或者申请一个免费域名托管过去都行。
1、登录cloudflare,依次点击左侧“构建”-“计算”-“workers和pages”,点击右上角“创建应用程序”。

2、选择“从Holle world开始”,什么都不需要修改,点击“部署”。


3、点击右上角“编辑代码”按钮,进入代码编辑页,删除现有所有代码,复制以下代码粘贴进去,点击部署。
export default {
async fetch(request) {
// 获取访问者真实 IP
const ip = request.headers.get('cf-connecting-ip') ||
request.headers.get('x-real-ip') ||
request.headers.get('x-forwarded-for') ||
'unknown';
// 只返回纯文本 IP
return new Response(ip, {
headers: { 'Content-Type': 'text/plain' }
});
}
};

4、设置自定义域名。点击“域”-“添加域名”,添加自己的子域名。


5、添加完自定义域名后,点击右上角“访问”按钮,即可打开接口网页,返回正确的访问IP,ipv4和ipv6均可。复制此网址到lucky的动态域名-编辑-IP变量列表即可。workers每日限制10万请求数,自己用或者和几个朋友共用,完全足够。



二、腾讯edgeone 边缘函数
腾讯最近推出了号称永久免费的cdn加速edgeone,分国际版和国内版,国际版可以使用未备案域名,国内版需要进行域名备案才能用。edgeone提供了一个边缘函数,类似cf的workers,页面写了限制300万请求数,不知道是不是每个月300万,也可以用来搭建一个IP接口。
1、注册登录腾讯edgeone,有备案域名的可以用国内版,没有备案域名的用国际版。依次点击“域名服务”-“域名管理”-“添加域名”。加速域名为二级域名,随意填。IPV6访问开启,回源配置随意填,也可根据自己需求填。此二级域名主要用来搭配后面的边缘函数规则使用,回源可以随意填。

2、新建函数。依次点击左侧下方“高级能力”-“边缘函数”-“新建函数”。

选择“创建hello world”,下一步


填写函数名称和描述,函数代码如下:
function handleRequest(request) {
// 通过 request.eo.clientIp 获取客户端 IP
const ip = request.eo.clientIp || '';
// 响应 JSON 数据
return new Response(JSON.stringify({ ip }), {
headers: { 'content-type': 'application/json' },
});
}
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
填写完后点击“创建并部署”。在弹出页面点击“新增触发规则”按钮,创建触发规则。

触发规则如上图示例。当url完全匹配此条件值时,执行刚才创建的函数,即可返回正确IP。建议域名后加上不重复的path,例如/ipcx,访问时需输入完整的url。

测试访问条件url,正确返回IP。按照之前方法将此接口地址加入lucky的动态域名ip变量即可。
三、使用lucky的web服务-文本输出功能搭建ip查询接口。
lucky的web服务非常强大,除了常用的反向代理和重定向,还支持文件服务、文本输出等等很多功能,可以用来搭建下载站,静态博客等等。这里我们使用文本输出功能来搭建一个ip查询接口。此方法因为在lucky上搭建,所以适用于给其他lucky提供接口,并不适用于给自己搭建IP查询接口。比如,你的宽带搭建一个给其他的lucky用,或者其他宽带搭建后给你用。我是用老家的联通宽带和我的电信宽带搭建,老家lucky和我的电信lucky互相使用对方接口。
1、lucky里新建一个web子规则,服务类型选“文本输出”,填写自定义前端地址,“自定义输出内容”填写lucky的全局变量{ClientIP},点击“添加子规则”即可。

返回子规则列表,访问此子规则url,即可返回正确IP。将此接口地址按前面方法加入其他lucky的接口地址列表即可。

四、阿里云ESA的函数和pages搭建
前面教程没有写esa的函数和pages,有网友提到了,就补充一下。esa的搭建和cf的workers几乎一致,没有难度。
1、注册登录阿里云的esa,按要求将一个二级域名或者主域名接入esa,这一部分不做过多讲解,不会的可以搜索一下esa接入,有详细教程。esa目前是申请试用一个月,到期后自动调整为免费版的策略。直接点击试用即可。
2、接入esa后,点击左侧的“边缘计算和AI”-“函数和pages”,点击“创建”按钮,创建方式选“函数模板”,选择第一个“hello world”模板,点击下一步。

函数名称默认即可,代码无需修改,直接提交即可。

提交后点击左侧“函数和pages”按钮,返回函数列表,点击刚才创建的函数,点击“代码”,将以下代码粘贴进代码框,保存发布。
export default {
async fetch(request) {
// 尝试从 X-Forwarded-For 获取 IP(多个 IP 时取第一个)
const xff = request.headers.get('X-Forwarded-For');
let clientIP = xff ? xff.split(',')[0].trim() : null;
// 如果 X-Forwarded-For 不存在,尝试 X-Real-IP
if (!clientIP) {
clientIP = request.headers.get('X-Real-IP');
}
// 如果都不存在,则使用 request 的 remoteAddress(在 ESA 环境中通常不可用,但保留兜底)
// 注意:在阿里云边缘函数中,无法直接获取 socket 远端地址,因此主要依赖上游 CDN 设置的头
if (!clientIP) {
clientIP = 'unknown';
}
return new Response(clientIP, {
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
});
}
};
点击函数上方“域名”按钮,绑定自定义域名。

设置好域名解析和边缘证书后,即可正常访问,返回正确的IP地址,IPV4和IPV6都可以使用。如IPV6无法访问,需要到“站点管理”-域名列表-点击域名-选择“速度和网络”-“优化”-“网络优化”-“配置”-开启IPV6支持,IPV6访问就正常了。

总结:
本教程介绍的四个方法都非常的简单,在现在公共接口频繁失效的情况下,自己动手搭建出来一个自用的接口,非常方便。自己搭建一个使用,也可以省点lucky自带默认接口的压力,自己维护也更方便。enjoy~
注:以上四个教程所用代码均为AI生成的, 直接使用即可,如有其他需求,可用AI按自己需求生成。
