利用 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/


相关文章
|
7月前
|
应用服务中间件 nginx
树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问
树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问
100 4
|
7月前
|
运维 负载均衡 应用服务中间件
LNMP详解(九)——Nginx虚拟IP实战
LNMP详解(九)——Nginx虚拟IP实战
147 2
|
7月前
|
Java 应用服务中间件 nginx
Nginx之服务端获取真实客户端IP
Nginx之服务端获取真实客户端IP
294 5
|
24天前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
|
4月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
4月前
|
应用服务中间件 持续交付 nginx
[nginx]借助nginx实现自动获取本机IP
[nginx]借助nginx实现自动获取本机IP
|
4月前
|
应用服务中间件 nginx 数据安全/隐私保护
nginx配置源IP访问控制
nginx配置源IP访问控制
|
6月前
|
Java 应用服务中间件 API
springboot+nginx获取真实IP
springboot+nginx获取真实IP
129 4
|
7月前
|
监控 数据可视化 安全
如何查找访问 Nginx 的前 10 个 IP?
【5月更文挑战第1天】
179 1
如何查找访问 Nginx 的前 10 个 IP?
|
7月前
|
域名解析 弹性计算 应用服务中间件
基于nginx反向代理实现OSS固定域名IP访问
本文基于阿里云OSS手册:https://help.aliyun.com/zh/oss/use-cases/use-an-ecs-instance-that-runs-centos-to-configure-a-reverse-proxy-for-access-to-oss,继续深入讨论如何利用nginx反向代理,实现固定的IP/域名访问OSS bucket。官方文档能够解决大部分的反向代理固定IP访问oss bucket的场景,但是对于必须使用域名作为endpoint的系统,会出现signatrue鉴权问题。本文继续在官方文档的基础上,将反向代理需要域名作为endpoint的场景补齐方案。