Mofe's Blog

如何搭建一个获取公网ip的服务(在中国)

2018-05-07

一直有在用 ifconfig.co、ifconfig.me 和 whatismyip.akamai.com 获取当前的公网ip, 最近有需求要在浏览器中获取用户的真实IP, 现有的轮子有跨域资源访问的问题, 并且ifconfig.co 还被block了,遂产生了写一个支持跨域访问的获取公网ip的服务

关于为啥不能直接获取到用户的真实IP地址我也解释下,应用程序是部署在 k8s 集群中的Sentry, 用于监控服务的错误信息, 但因为使用了阿里云 LoadBalance , calico 以及 k8s 的 ingress 控制器, 导致获取用户真实 IP 变得不那么容易,虽然这样能在一定程度上保证服务的稳定。

后来翻到在提交错误信息的时候是可以手动提交IP地址的,就产生了搭建这个服务的想法

1 图1. sentry 报告的IP地址均为内网地址

以上是背景


开始兴匆匆撸代码,有用的代码就三行(完整代码)

add_header Access-Control-Allow-Origin *; # 允许跨域访问
content_by_lua '
    ngx.say(ngx.var.remote_addr) # 返回客户端 IP 地址
';

用不了几分钟就写完了,测试没问题,找个服务器部署吧,k8s 肯定是不能用了,据说腾讯云最近搞活动 研究了下活动内容, 花了526买了台1核1G 200M宽带的机器三年…

2 3

心里美滋滋,比首页的活动优惠并且配置还更好

复制粘贴没多久就搭好服务,解析域名,咱域名可是有备案的

虽然听说腾讯云和阿里云的备案是分开的, 想想再复杂能复杂到哪去。。悻悻的解析好域名,期望运气差的不会是我

果不其然,隔两天上去就发现被封了

4

那就老实备案吧

5

没多久第一个问题就出来了

6

备案密码是什么鬼。怎么一点印象都没

7

翻文档才想起来备案成功后有个短信告诉密码。。拿到后没用过就没了印象, 只能找回密码

8

信息需要填的不多,很快就提示操作成功,我就不吐槽网站的UI了。

再后来发现如果是在上海备案的机器,迁移备案也必须填写上海地址,电话以及上海户口(或者居住证)

碰巧居住证过期了没有续期。。。。。。

心痛。。结论,迁移备案比直接备案痛苦多了。。。

那就换一条路,注册一个新域名,本想等着 app 域名发布, 后来想到域名备案还不支持app域名,果断放弃

机智的花了 248 买了个 iiip.co 域名,

9

这会不用忍受迁移备案的痛苦了,美滋滋

10 11 12 13

万念俱灰。遂买了个香港阿里云静静的搭好服务器…


如果不用备案。这篇文章应该是这样

写好代码

add_header Access-Control-Allow-Origin *; # 允许跨域访问
content_by_lua '
    ngx.say(ngx.var.remote_addr) # 返回客户端 IP 地址
';

搭好服务

完。。。


Mofe Lee

矮油,今天天气不错