ddns动态域名解析系统 路由器动态域名解析ddns

接着上篇 《使用 Nginx 提供 DDNS 服务(前篇)》继续说说怎么样玩转 Nginx 和 Njs 。本文将基于上一篇的内容 。修改架构 。让这套服务能够在云端运行 。降低本地调用成本 。
本文文章中 。我们实际使用的代码行数会比上篇文章更少 。全部代码 150 行差不多 。
写在前面和上篇文章一样 。我们需要先了解本文内容中的服务架构和事件流程 。为了便于理解 。我画了一个无脑的流程图 。

ddns动态域名解析系统 路由器动态域名解析ddns

文章插图
如果你是 NAS 或者向日葵这种应用服务客户 。你会发现图中的模式和你曾经使用的模式几乎一模一样 。
在这种方案中 。我们本地不再需要运行容器或者 Nginx 实例 。在路由器或者 NAS 中运行一个规划任务 。使用 Curl 之类的方法定时调用在云服务器上部署的服务接口 。就可完成 DDNS 记录更新 。甚至你在家用电脑上打开网址 。设置页面全自动刷新也应该达到一样的效果 。
相有那么一点方案一 。这种方案对于设备要求更低一些 。至于使用哪一种 。根据自己手里设备资源状况来确认就好啦 。
那么 。我们就来展开说说 。怎么通过 Nginx 和容器完成这种服务方案 。
使用 Nginx 完成 IP 获取逻辑
我们还是使用 Nginx 先来完成 IP 获取逻辑 。这里我们有两个选择 。一个是和前文一样 。使用外部服务来完成 IP 查询逻辑 。还有一个选择只是直接使用 Nginx 来高效的完成这种功能 。
因为部署在云端 。获取 IP 和 DNS 记录更新逻辑应该合并在一起 。但是为了方便理解 。这里将两部分拆解开来进行描述 。
常规和往往一般容器方案如果你在云服务器上通过 APT 或 YUM 安装 Nginx。那么直接使用下面的配置启动 Nginx。就能够将访问者的 IP 展示出去啦 。
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
default_type text/plain;
return 200 "$remote_addr";
}
}
当然 。为了保护更无脑 。讲解使用容器来启动服务 。将上面的配置保存为 nginx.conf。之后编写编排文件:
version: "3"
services:
ngx-whats-myip:
image: nginx:1.21.1-alpine
volumes:
- ./nginx.conf:/etc/nginx/templates/default.conf.template:ro
ports:
- 80:80
environment:
- NGINX_ENTRYPOINT_QUIET_LOGS=1
之后 。将上面的内容保存为 docker-compose.yml。使用 docker-compose up -d 启动服务 。访问服务器 IP 和你指定的端口 。一个属于你自己的私一些查询 IP 的服务就就绪啦 。
如果你是我的老读者 。我更讲解你使用 Traefik 进行保护管理 。
Traefik 方案使用 Traefik 应该让你更轻松的管理服务域名 。进动作态急速的服务发现 。但是因为要经历过 Traefik 这种网关 。所以我们需要进行一些配置修改 。才能够让服务正常运行 。
先对 Nginx 配置文件进行修改:
server {
listen 80;
server_name localhost;
charset utf-8;
set_real_ip_from 172.160.0.0/16;
set_real_ip_from 172.170.0.0/16;
set_real_ip_from 172.180.0.0/16;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
location / {
default_type text/plain;
return 200 "$remote_addr";
}
}
应该观看到的我这里使用 set_real_ip_from 设置了三个相信的网络环境 。这些数值是怎么来的呢?很无脑 。使用 docker info。应该观看到的输出消息最下面有类似这样的消息:
...
...
Live Restore Enabled: false
Default Address Pools:
Base: 172.160.0.0/16, Size: 24
Base: 172.170.0.0/16, Size: 24
Base: 172.180.0.0/16, Size: 24
这里你有几个地址 。就将几个地址填充到配置里就可 。此外 。容器编排文件中添加 Traefik 声明就可:
version: "3"
services:
ngx-ip:
image: nginx:1.21.1-alpine
volumes:
- ./nginx.conf:/etc/nginx/templates/default.conf.template:ro
【ddns动态域名解析系统 路由器动态域名解析ddns】networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.routers.ngx-whatsmyip-www.entrypoints=http"
- "traefik.http.routers.ngx-whatsmyip-www.rule=Host(`whatsmyip.lab.io`)"
- "traefik.http.routers.ngx-whatsmyip-ssl.entrypoints=https"
- "traefik.http.routers.ngx-whatsmyip-ssl.tls=true"
- "traefik.http.routers.ngx-whatsmyip-ssl.rule=Host(`whatsmyip.lab.io`)"
- "traefik.http.services.ngx-whatsmyip-backend.loadbalancer.server.scheme=http"

推荐阅读