利用 Nginx 实现简易的公网IP查询

简介: 本文将介绍如何利用纯 Nginx 搭建简易的公网 IP 地址查询接口

> 安装 Nginx 的方法就不介绍了,直接丢配置文件了。


> 文末有现成的,如果你不想自己搭建的话可以直接使用。


## 配置示例

### 获取 IP(JSON)

```nginx

server {

      listen 80;

      listen [::]:80;


      listen 443 ssl http2;

      listen [::]:443 ssl http2;


      # 用以支持 HTTP/3,若所用 Nginx 版本支持 HTTP/3,可去掉注释

      # listen 443 http3;

      # listen [::]:443 http3;


      server_name ipv4.ddnsip.cn ipv6.ddnsip.cn ddnsip.cn;


      # 用以支持 HTTP/3,若所用 Nginx 版本支持 HTTP/3,可去掉注释

      # add_header Alt-Svc 'h3=":443"; ma=86400';


      # HSTS

      add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";


      # 允许跨域(在其他站点调用接口会用到)

      add_header Access-Control-Allow-Origin *;

      add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";

      add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";

     

      # 获取 IP 地址

      location / {

          default_type application/json;

          return 200 '{"ip":"$remote_addr"}';

          # 若使用 CDN 请将$remote_addr改为$http_x_forwarded_for

        }

     

      # 证书配置

      ssl_certificate /root/.acme.sh/*.ddnsip.cn/fullchain.cer;

      ssl_certificate_key /root/.acme.sh/*.ddnsip.cn/*.ddnsip.cn.key;

      ssl_session_timeout 5m;

      ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

      ssl_prefer_server_ciphers on;

   }

```

### 获取 IP(纯文本)

```nginx

server {

      listen 80;

      listen [::]:80;


      listen 443 ssl http2;

      listen [::]:443 ssl http2;


      # 用以支持 HTTP/3,若所用 Nginx 版本支持 HTTP/3,可去掉注释

      # listen 443 http3;

      # listen [::]:443 http3;


      server_name ipv4.ddnsip.cn ipv6.ddnsip.cn ddnsip.cn;


      # 用以支持 HTTP/3,若所用 Nginx 版本支持 HTTP/3,可去掉注释

      # add_header Alt-Svc 'h3=":443"; ma=86400';


      # HSTS

      add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

     

      # 获取 IP 地址

      location / {

          default_type text/plain;

          return 200 $remote_addr;

          # 若使用 CDN 请将$remote_addr改为$http_x_forwarded_for

        }

     

      # 证书配置

      ssl_certificate /root/.acme.sh/*.ddnsip.cn/fullchain.cer;

      ssl_certificate_key /root/.acme.sh/*.ddnsip.cn/*.ddnsip.cn.key;

      ssl_session_timeout 5m;

      ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

      ssl_prefer_server_ciphers on;

   }

```

### 获取 UA

这是额外的内容,闲的没事写的

```nginx

server {

      listen 80;

      listen [::]:80;


      listen 443 ssl http2;

      listen [::]:443 ssl http2;


      # 用以支持 HTTP/3,若所用 Nginx 版本支持 HTTP/3,可去掉注释

      # listen 443 http3;

      # listen [::]:443 http3;


      server_name ipv4.ddnsip.cn ipv6.ddnsip.cn ddnsip.cn;


      # 用以支持 HTTP/3,若所用 Nginx 版本支持 HTTP/3,可去掉注释

      # add_header Alt-Svc 'h3=":443"; ma=86400';


      # HSTS

      add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

     

      # 获取 UA(纯文本格式,想要 JSON 格式请用注释掉的代码)

      location / {

          default_type text/plain;

          return 200 $http_user_agent;

        }


      # 获取 UA(JSON 格式)

      # location / {

      #     default_type application/json;

      #     return 200 '{"ua":"$http_user_agent"}';

      #   }


      # SSL 配置

      ssl_certificate /root/.acme.sh/*.ddnsip.cn/fullchain.cer;

      ssl_certificate_key /root/.acme.sh/*.ddnsip.cn/*.ddnsip.cn.key;

      ssl_session_timeout 5m;

      ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

      ssl_prefer_server_ciphers on;

   }

```

### 附言

看着很复杂是不是,是不是懒得写(/手动狗头,没关系,这有现成的

UA: https://ua.ddnsip.cnhttps://ddnsip.cn/ua (JSON)

IP: https://ddnsip.cnhttps://ddnsip.cn/json

IPv4: https://ipv4.ddnsip.cnhttps://ddnsip.cn/json

IPv6: https://ipv6only.ddnsip.cnhttps://ipv6only.ddnsip.cn/json


Linux下使用直接看下面链接里的说明:

https://www.ddnsip.cn


闲的没事搞了个查IP归属的(不保证稳定和准确):

https://ip.ddnsip.cn/


相关文章
|
应用服务中间件 nginx
树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问
树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问
232 4
|
运维 负载均衡 应用服务中间件
LNMP详解(九)——Nginx虚拟IP实战
LNMP详解(九)——Nginx虚拟IP实战
217 2
|
Java 应用服务中间件 nginx
Nginx之服务端获取真实客户端IP
Nginx之服务端获取真实客户端IP
407 5
|
4月前
|
存储 应用服务中间件 nginx
在使用Nginx之后,如何在web应用中获取用户IP以及相关原理
但总的来说,通过理解网络通信的基础知识,了解http协议以及nginx的工作方式,我们已经能在大多数情况下准确地获取用户的真实IP地址了,在调试问题或者记录日志时会起到很大的帮助。
250 37
|
9月前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
819 3
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
应用服务中间件 持续交付 nginx
[nginx]借助nginx实现自动获取本机IP
[nginx]借助nginx实现自动获取本机IP
223 5
|
Java 应用服务中间件 API
springboot+nginx获取真实IP
springboot+nginx获取真实IP
392 4
|
监控 数据可视化 安全
如何查找访问 Nginx 的前 10 个 IP?
【5月更文挑战第1天】
467 1
如何查找访问 Nginx 的前 10 个 IP?
|
应用服务中间件 nginx 数据安全/隐私保护
nginx配置源IP访问控制
nginx配置源IP访问控制
171 0