这可能听起来像一个代码高尔夫问题,但是在
$remote_addr
中返回 text/plain
的最简单/最简单的方法是什么?
因此,它应该以纯文本形式返回 IP 地址的几个字节。
216.58.221.164
用例:用于了解客户端自己的外部 (NAT) 全局 IP 地址的 API。
是否可以仅使用 Nginx 并且无需任何后端来完成此操作?如果是的话,怎么办?
最简单的方法是:
location /remote_addr {
default_type text/plain;
return 200 "$remote_addr\n";
}
以上内容应添加到您的
server
的 nginx.conf
块中。
无需使用任何第三方模块(echo、lua等)
您可以使用以下方法来考虑代理连接:
# Map IP address to variable
map ":$http_x_forwarded_for" $IP_ADDR {
":" $remote_addr; # Forwarded for not set
default $http_x_forwarded_for; # Forwarded for is set
}
server {
...
location / {
default_type text/plain;
return 200 "$IP_ADDR";
}
}
使用
ngx_echo
:
location /ip {
default_type text/plain;
echo $remote_addr;
}
使用ngx_lua:
location /b {
default_type text/plain;
content_by_lua '
ngx.say(ngx.var.remote_addr)
';
}
很久以前,我做了一个练习,总是使用以下配置将 ip.example.com 添加到我的大多数服务器:
/etc/nginx/sites-enabled$ cat ip
server {
server_name ip.*;
root /dev/null;
access_log /dev/null;
error_log /dev/null;
location / {
default_type text/plain;
return 200 "$remote_addr\n";
}
}
对于检查VPN、网络、远程访问、脚本等确实很有帮助...您可以直接在浏览器中使用它或在cli中使用curl...