如标题所示,不依赖任何后端方法,使用纯 Nginx 实现(Nginx-Lua 也不需要)一个“显示我的 IP 地址”的 API。
实际上这是我在很久之前看过的一篇文章中介绍的技巧,时间有点久了,一时半会儿也找不到原文地址,但发现自己当时写的 Nginx 配置文件还在,所以翻出来分享一下。
普通版本
Nginx 的配置文件中提供了一个变量 $remote_addr 用来获取用户访问本实例时的 IP 地址,我们只要将这个变量的值返回给用户就行了(没错,就是这么简单!):
location / {
default_type text/plain;
return 200 $remote_addr;
}
这里使用 default_type text/plain 来向浏览器表明我们返回的值是一个纯文本,从而能够被浏览器直接显示出来。
JSON 版本
同样依赖于 $remote_addr 这个变量,我们可以将返回值稍微修饰一下,实现一个返回 JSON 数据的 API:
location /json {
default_type application/json;
return 200 "{\"ip\":\"$remote_addr\"}";
}
配置文件中的 default_type application/json 向浏览器表明我们的返回的值是 JSON 数据。
测试效果
配置好后可以使用 curl 来测试一下(下面的 API 域名和返回值中的 IP 地址都做了替换处理,非真实情况):
$ curl http://example.com/
xx.xx.xx.xx
$ curl http://example.com/json
{"ip":"xx.xx.xx.xx"}
Comments | NOTHING