前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用 Nginx 实现简易的公网 IP 查询

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

原创
作者头像
Im小泽
修改2023-09-12 14:02:35
9380
修改2023-09-12 14:02:35
举报
文章被收录于专栏:小泽的专栏小泽的专栏

本文将介绍如何利用纯 Nginx 搭建 IP 地址查询接口(只查询 IP 地址,不查询 IP 归属地),如果有查询 IP 归属地的需求,可以参考另一位大佬的一篇文章 纯 Nginx 打造 IP 地址查询接口

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

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

配置示例

获取 IP(JSON)

代码语言:text
复制
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(纯文本)

代码语言:text
复制
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

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

代码语言:text
复制
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://ipv6.ddnsip.cnhttps://ipv6.ddnsip.cn/json

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

https://www.ddnsip.cn

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

https://ip.ddnsip.cn/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置示例
    • 获取 IP(JSON)
      • 获取 IP(纯文本)
        • 获取 UA
          • 附言
          相关产品与服务
          内容分发网络 CDN
          内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com