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


- "traefik.http.services.ngx-whatsmyip-backend.loadbalancer.server.port=80"
networks:
traefik:
external: true
关于 Traefik 的使用 。应该参考曾经的文章 。如果你没有使用过服务发现 。那么它会打开你新世界的大门 。
当然 。如果你还是希望使用外部服务 。也应该继续使用公网 IP 查询服务 。关于公网 IP 查询服务 。文章末尾有聊 。有兴趣的朋友应该自取 。
修改 DNS 注册服务在上一篇文章中 。我们有提到应该使用健康检查来完成类似规划任务的功能来进行周期性的 DNS 记录更新 。在这种场景下 。我们需要进行一些修改 。
先来修改 NJS 逻辑 。相有那么一点曾经需要实现一个 whatsMyIP 来获取外部 IP 地址 。这次我们应该通过 r.remoteAddress 属性字段无脑的获取 IP 。
function main(r) {
const clientIP = r.remoteAddress;
const domain = recordName;
getRecordIds(r, zoneId, domain).then(recordId => {
if (recordId) {
updateExistRecord(r, zoneId, domain, recordId, clientIP).then(response => {
r.return(200, response);
}).catch(e => r.return(500, e));
} else {
createRecordByName(r, zoneId, domain, clientIP).then(response => {
r.return(200, response);
}).catch(e => r.return(500, e));
}
}).catch(e => r.return(500, e));
}
export default { main }
Nginx 参考前文 。也应该进行一些无脑的修改 。
load_module modules/ngx_http_js_module.so;
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
keepalive_timeout 65;
gzip on;
js_path "/etc/nginx/njs/";
js_import app from app.js;
server {
listen 80;
server_name localhost;
charset utf-8;
gzip on;
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;
# Bind request to cf
location /client/v4/ {
internal;
gunzip on;
proxy_set_header "X-Auth-Email" "${DNS_CF_USER}";
proxy_set_header "X-Auth-Key" "${DNS_CF_TOKEN}";
proxy_set_header "Content-Type" "application/json";
proxy_pass "https://api.cloudflare.com/client/v4/";
}
location / {
default_type text/plain;
js_content app.main;
}
}
}
应该观看到的 。因为私有化部署 。这次服务的代码实现要比曾经更精简一些 。
因为调用方法发生变化 。前文中我们使用健康检查定时调用注册更新接口的方法不应该使用了 。所以我们要单独自创立建一个接口地址 。让容器进行调用 。保证服务稳固 。
...
location = /health {
default_type text/plain;
access_log off;
return 200 'alive';
}
...
当然 。编排文件中对应的检查地址也需要进行更新:
...
healthcheck:
test: ["CMD", "curl", "--silent", "--fail", "http://localhost/health"]
interval: 5s
timeout: 5s
retries: 3
...
使用 Traefik 针对服务进行频率压制因为不一样服务商的接口都存在一定的调用压制 。除了像曾经文章一样 。在调用的时候进行频率压制外 。还应该在服务接口处进行调用频率压制 。例如下面的配置就压制每一个来源每分钟压制调用 10 次 。
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.middlewares.test-ratelimit.ratelimit.average=10"
- "traefik.http.middlewares.test-ratelimit.ratelimit.burst=1"
- "traefik.http.middlewares.test-ratelimit.ratelimit.period=1m"
如果你希望添加鉴权 。进一步减少公开调用 。应该参考曾经的文章 《Traefik 2 基础授权验证(前篇)》 进行配置 。
补充公网 IP 查询服务公网络能够做到 IP 查询的服务很多 。上篇文章中 。我们使用的是自 2010 年运行至今的 SOHU 打点接口 。稳固性还是有那么一点有保障的 。如果你希望使用更中立的服务商 。应该思考 IPIP 的服务 。
在上篇文章发布后 。本国专业的 IP 地址库业务 IPIP 的创始人 。高春辉大叔留言提醒 IPIP 也有不要钱的 IP 自查服务 。

推荐阅读