一直有在用 ifconfig.co 、ifconfig.me 和 whatismyip.akamai.com 获取当前的公网 ip, 最近有需求要在浏览器中获取用户的真实 IP, 现有的轮子有跨域资源访问的问题, 并且 ifconfig.co 还被 block 了,遂产生了写一个支持跨域访问的获取公网 ip 的服务
关于为啥不能直接获取到用户的真实 IP 地址我也解释下,应用程序是部署在 k8s 集群中的 Sentry, 用于监控服务的错误信息, 但因为使用了阿里云 LoadBalance , calico 以及 k8s 的 ingress 控制器, 导致获取用户真实 IP 变得不那么容易,虽然这样能在一定程度上保证服务的稳定。
后来翻到在提交错误信息的时候是可以手动提交 IP 地址的,就产生了搭建这个服务的想法
图 1. sentry 报告的 IP 地址均为内网地址
以上是背景
开始兴匆匆撸代码,有用的代码就三行(完整代码)
add_header Access-Control-Allow-Origin *; # 允许跨域访问
content_by_lua '
ngx.say(ngx.var.remote_addr) # 返回客户端 IP 地址
';
用不了几分钟就写完了,测试没问题,找个服务器部署吧,k8s 肯定是不能用了,据说腾讯云最近搞活动 研究了下活动内容, 花了 526 买了台 1 核 1G 200M 宽带的机器三年...
心里美滋滋,比首页的活动优惠并且配置还更好
复制粘贴没多久就搭好服务,解析域名,咱域名可是有备案的
虽然听说腾讯云和阿里云的备案是分开的, 想想再复杂能复杂到哪去。。悻悻的解析好域名,期望运气差的不会是我
果不其然,隔两天上去就发现被封了
那就老实备案吧
没多久第一个问题就出来了
备案密码是什么鬼。怎么一点印象都没
翻文档才想起来备案成功后有个短信告诉密码。。拿到后没用过就没了印象, 只能找回密码
信息需要填的不多,很快就提示操作成功,我就不吐槽网站的 UI 了。
再后来发现如果是在上海备案的机器,迁移备案也必须填写上海地址,电话以及上海户口(或者居住证)
碰巧居住证过期了没有续期。。。。。。
心痛。。结论,迁移备案比直接备案痛苦多了。。。
那就换一条路,注册一个新域名,本想等着 app 域名发布, 后来想到域名备案还不支持 app 域名,果断放弃
机智的花了 248 买了个 iiip.co 域名,
这会不用忍受迁移备案的痛苦了,美滋滋
万念俱灰。遂买了个香港阿里云静静的搭好服务器....
如果不用备案。这篇文章应该是这样
写好代码
add_header Access-Control-Allow-Origin *; # 允许跨域访问
content_by_lua '
ngx.say(ngx.var.remote_addr) # 返回客户端 IP 地址
';
搭好服务
完。。。
新增支持https访问。。
发现 https 的网站通过 ajax 请求 http 的会无法发起请求。估计是chrome的新特性,所以现在加了对https的支持
通过阿里云的 loadbalance 实现的,顺便也可以看到这个小接口的访问情况
curl -v https://iiip.co
不过在使用中发现 https 间歇性的不能访问。。估计是遇到了跨境公网访问中不可描述的原因。。http不会出现这种问题。。我会继续监测下去的。
代码也更新了下,参考了 @ywgx 的意见
add_header Access-Control-Allow-Origin *;
content_by_lua '
ngx.say(ngx.var.http_x_forwarded_for or ngx.var.remote_addr)
';
1
mofe OP 额,悻悻的附上新写的博客的链接。。。https://www.mofe.me/2018/0508/
|
2
huiyifyj 2018-05-08 19:15:21 +08:00 via Android
233😂
看来备案转移确实麻烦。emm 下回转移会掂量着点。 |
3
songz 2018-05-08 19:16:49 +08:00 1
一篇文章就这么被那些表情毁了
|
5
mofe OP |
6
ichuan 2018-05-08 19:21:06 +08:00 2
|
7
XSugar 2018-05-08 19:21:22 +08:00 via iPhone
开 https 就不用备案了
|
8
mofe OP 开 https 获取个 ip 输入的字母就多了。。curl 默认不会重定向。。。
|
9
moult 2018-05-08 19:24:31 +08:00
其实这种服务可以直接用 SAE 跑,完全不需要单独搞一台服务器。
|
11
mofe OP @ichuan httpbin.org 不开代理好像没法访问。。
|
12
crbee 2018-05-08 19:44:20 +08:00
是按流量计费的么?
|
13
valorachen 2018-05-08 19:44:36 +08:00
这是腾讯云什么活动?能给个链接吗?我好像找不到额
|
14
imdong 2018-05-08 19:46:07 +08:00
偷偷告诉楼主,根据协议原理,没备案的域名用 https 也不会被发现的。
|
15
litter123 2018-05-08 19:47:13 +08:00
获取公网 IP,写一个 PHP 就行了,$_SERVER['REMOTE_ADDR'],然后在 web 服务器设置允许的域名
|
16
tangzipeng 2018-05-08 19:54:40 +08:00
@imdong 难怪我前阵子域名没备案,一直可以用……
|
19
mofe OP @valorachen 两个优惠叠加诶,包年本来就有优惠,然后实名认证之后送的优惠券是可以叠加使用的,所以算下来比官网的优惠力度还要大,而且官网的宽带小水管,还是系列 1 的机器。。
|
20
mofe OP |
24
qq316107934 2018-05-08 21:15:35 +08:00 via Android
@mofe 200M 这么便宜简直了...去找找去,要毕业了要没学生云用了
|
25
mofe OP @qq316107934 为了防止误导,解释下这是按流量收费的 200M。。
|
26
mofe OP @qq316107934 其实 1M 宽带也有办法变成 200M 的,阿里云的方法就是在前面挂一个 tcp 的 LoadBalance,后端挂那个 1M 的机器,收费和按量收费一样,还多一个 IP..
|
27
xsn 2018-05-08 21:24:26 +08:00
|
28
afpro 2018-05-08 21:30:18 +08:00
|
29
qinxi 2018-05-08 22:55:37 +08:00 via Android
这种东西,,,lambda 就行了吧
|
31
SingeeKing 2018-05-08 23:28:34 +08:00
curl ip.sb
|
32
flynaj 2018-05-09 01:33:39 +08:00 via Android
httpbin.org 是开源的,部署到服务器上改一下端口
|
33
appdomain 2018-05-09 01:49:38 +08:00 via iPhone
nginx 取
|
34
ywgx 2018-05-09 07:55:45 +08:00 via Android
难道没有人发现,楼主提供的获取真实 IP 是错误的方法吗? 业务前有代理呢? 比如有 WAF, 或者高防设备呢? 幼稚啊
|
35
2010 2018-05-09 08:29:20 +08:00 via Android
楼上的问题~X-Forwarded-For 字段
|
36
isCyan 2018-05-09 08:56:48 +08:00
526 是用了 500 块的券?哪里有的?
|
37
gsw945 2018-05-09 09:05:02 +08:00
不知道 ipify?
|
38
gsw945 2018-05-09 09:14:08 +08:00
ipfy ( A Simple Public IP Address API ):
官网(展示了各种在各种语言中调用): https://www.ipify.org Github (开源的,go 开发的): https://github.com/rdegges/ipify-api api 调用(支持纯 ip 字符串、json 和 jsonp 方式): 纯字符串格式: https://api.ipify.org/ json 格式: https://api.ipify.org/?format=json jsonp 格式: https://api.ipify.org?format=jsonp&callback=getip |
39
ywgx 2018-05-09 09:48:25 +08:00
楼主 local ip=headers["X-REAL-IP"] or headers["X_FORWARDED_FOR"] or ngx.var.remote_addr or "-"
|
40
qnwx1 2018-05-09 09:50:57 +08:00
关键词:“公网 ip ”内容已经被我们记录。根据 2017 年 7 月最新出台的《互联网发言管理认证条例》, 由于您违反其中相关规定,已经被列入 2018 年网络通缉人员名单,您的 IP 已经锁定。 有关部门正在组织网络技术相关人员对您的资料搜集工作及相关惩罚措施的。在这里,希望您可以主动前往当地执法机关投案自首。
( |
41
satanandroid 2018-05-09 09:58:07 +08:00
frp
|
43
mofe OP @2010 事实上我的 k8s 集群会自动管理 https 证书,所以 Loadbalance 必须得用 tcp,所以没有 X-Forwarded-For 字段,并没有测试过阿里云的 tcp Loadbalance 可不可以 forward 真实 ip 进来。。但能 forward 进来也不符合我需求的场景,因为还有一层 ingress 控制器挡在服务前面,解决问题最简单的方式就是前段传一个真实 ip 进来就行,所以选择了最简单的方式,哈哈
|
44
mushan099 2018-05-09 10:13:43 +08:00
看完楼主的帖子我决定打死也不入国内主机了。。。
|
46
LukeChien 2018-05-09 10:17:22 +08:00 via Android
前端用 jsonp 就好了,新浪搜狐都有 js 接口,返回 IP 地址和归属地
|
47
aru 2018-05-09 10:23:16 +08:00
|
48
mofe OP @mushan099 哈哈,只是吐槽一下,国内主机还是可以入的,只是需要注意一些小坑
比如某些域名不能备案 某些地区备案有一些特殊的规定,类似上海必须要上海户口或者居住证,使用上海本地的电话和住址。 并且用小本本记录好之前备案的所有信息 而且新备其实比迁移备案要舒服些的。是我自己给自己留的坑。。。 国内云还是有很多优势的,国外的服务器很有可能在某些天访问特别不稳定。。 |
49
ety001 2018-05-09 12:24:26 +08:00
|
50
Harry1993 2018-05-09 12:29:19 +08:00 1
dig +short myip.opendns.com @resolver1.opendns.com
|
52
opengps 2018-05-09 13:38:26 +08:00
如果只是获取 ip,直接访问服务器 ip 就行了,服务器直接返回客户端 ip
|
53
mofe OP 查了一下,阿里云的 TCP LoadBalance 不会挡住用户的真实 ip,https://www.alibabacloud.com/help/zh/doc-detail/54007.htm
|
55
Qiss 2018-05-09 14:38:56 +08:00
<?
$iipp=$_SERVER["REMOTE_ADDR"]; echo $iipp; ?> 这个是拍黄片的 |
56
mofe OP @AppxLite 我买了一个 jumpto.app ...
|
57
xidadada 2018-05-09 15:02:59 +08:00
花了 526 买了台 1 核 1G 200M 宽带的机器三年?????? 200m 宽带 3 年 5 百块?????重点在这里,怎样做到的,v2ex 网站宽带估计都没有 200m 吧?
|
59
mofe OP |
60
460881773 2018-05-09 15:33:35 +08:00
现在 还能上车吗 200M 的带宽!!
|
61
AppxLite 2018-05-09 15:41:38 +08:00
原价 push 给你咯
|
63
mofe OP |
64
panzhc 2018-05-09 17:04:53 +08:00
只要 nginx 就足够了,curl ip.qaros.com ,支持 https
location / { default_type html; return 200 "$remote_addr"; } |
65
JoyChou 2018-05-10 11:06:47 +08:00
一句话就能写完的,要写这么多,楼主辛苦了…
|