Nginx:直接以text/plain方式返回$remote_addr

问题描述 投票:0回答:4

这可能听起来像一个代码高尔夫问题,但是在

$remote_addr
中返回
text/plain
的最简单/最简单的方法是什么?

因此,它应该以纯文本形式返回 IP 地址的几个字节。

216.58.221.164

用例:用于了解客户端自己的外部 (NAT) 全局 IP 地址的 API。

是否可以仅使用 Nginx 并且无需任何后端来完成此操作?如果是的话,怎么办?

networking nginx
4个回答
56
投票

最简单的方法是:

location /remote_addr {
    default_type text/plain;
    return 200 "$remote_addr\n";
}

以上内容应添加到您的

server
nginx.conf
块中。

无需使用任何第三方模块(echo、lua等)


4
投票

您可以使用以下方法来考虑代理连接:

# 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";
    }
}

2
投票

使用

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)
    ';
}

0
投票

很久以前,我做了一个练习,总是使用以下配置将 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...

© www.soinside.com 2019 - 2024. All rights reserved.