二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

    • 运维最佳实践

      • 一句话经验
      • 基于CNAME解析实践的域名优雅方案
        • 1,CNAME
          • 1,分析
          • 2,示例
      • 如何配置历史命令中有详细的时间戳
      • 建设一个运维外挂的最佳实践
      • 关于打包压缩几种格式(gzip,bzip2,xz)的试验对比
      • 利用谷歌浏览器自定义agent监听日志来调试服务
      • fdisk,parted使用非交互式方式对磁盘进行分区操作
      • GitLab部署的最佳实践
      • GitLab全局搜索之SourceGraph
      • vector实践-性能吊打logstash
      • 规范编码之利用pre-commit给项目添加提交前检查
      • CMDB平台建设指南
      • 用上赛博菩萨CNB,咱直接起飞
    • 成本优化实践

  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • AWS

  • Prometheus

  • Grafana

  • Loki

  • CentOS

  • Supervisord

  • Systemd

  • Docker

  • Docker-Compose

  • Rancher

  • Ansible

  • OpenLdap

  • GitLab

  • GitHub

  • Etcd

  • Consul

  • RabbitMQ

  • Kafka

  • Mysql

  • MongoDB

  • OpenVPN

  • Kvm

  • VMware

  • 配置文件详解

  • Other

  • 运维观止
  • 最佳实践
  • 运维最佳实践
二丫讲梵
2021-06-22
目录

基于CNAME解析实践的域名优雅方案

文章发布较早,内容可能过时,阅读注意甄别。

通常,我们针对域名管理,以及其下 NGINX 配置文件的管理,大多都是分散的,这种分散并不是刻意为之,而是随着业务发展以及需求的对接,不知不觉中,发现域名加了一个又一个,配置文件更是各不相同,这对标准化而言是个灾难,对未来的操作更是注入了不稳定因素。

所谓天下大势,分分合合。

形如 hosts 到 dns,jenkinsfile 到 share library,我统一把这种思路归到初中时的一个数学思路:提取公因式。

那么对于域名解析方面的实践,这里要介绍的,其实也是一次提取公因式。

# 1,CNAME

# 1,分析

通过 CNAME 的方式,我们能够轻松的将一些相对集中的域名进行更加优雅统一的管理,这种方案的思路大概如下:

假如我们的测试环境所有的域名有一个统一的入口 NGINX,此后所有的测试域名都在这里解析,如果按照传统的思路,那么一个域名对应一条 A 记录,那么如果测试环境有 100 个域名,就会需要添加 100 个 A 记录,这看起来似乎也没什么问题,但是,如果这个时候因为一些原因,此入口 NGINX 需要迁移,或者外网 IP 不得不更换,此时即便是有工具能够批量修改 100 个 A 记录,也是一个不够优雅便捷的方案。

我们稍微调整一下方案:解析一个统一的 A 记录在入口处,然后其他域名都通过 CNAME 的方式解析到统一的 A 记录上,这样一来,就算是测试入口需要变更,也只需要更改一条记录即可解决此问题,而不需要考虑那 100 个了。

# 2,示例

此时我拿个人域名 eryajf.net 举例,当前 wiki 站点域名解析如下:

$ dig wiki.eryajf.net

; <<>> DiG 9.10.6 <<>> wiki.eryajf.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15687
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;wiki.eryajf.net.		IN	A

;; ANSWER SECTION:
wiki.eryajf.net.	599	IN	A	8.136.215.57

;; Query time: 253 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jun 22 23:24:33 CST 2021
;; MSG SIZE  rcvd: 60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

可以看到是直接 A 记录解析到 8.136.215.57。

申明

原创文章eryajf,未经授权,严禁转载,侵权必究!此乃文中随机水印,敬请读者谅解。

Copyright 二丫讲梵 (opens new window) 版权所有

现在,我在 DNS 解析中做一些调整:

  • 先加一条 A 记录 prod.eryajf.net:

    image-20210622232855369

  • 然后添加一条 CNAME 记录作为正常的服务域名 wiki.eryajf.net:

    image-20210622233129677

这个时候我们可以将域名 CNAME 到上边定义的 A 记录,那么就能把 100 个域名进行统一解析管理了。

注意:CNAME 记录值中域名最后位的点可带可不带。

此时该域名的解析链路如下:

$ dig wiki.eryajf.net

; <<>> DiG 9.10.6 <<>> wiki.eryajf.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40403
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;wiki.eryajf.net.		IN	A

;; ANSWER SECTION:
wiki.eryajf.net.	599	IN	CNAME	prod.eryajf.net.
prod.eryajf.net.	599	IN	A	8.136.215.57

;; Query time: 440 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jun 22 23:33:39 CST 2021
;; MSG SIZE  rcvd: 79
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

其中的 ANSWER SECTION很清晰地列出了整个链路解析流程。

微信 支付宝
#DNS#最佳实践#运维最佳实践
上次更新: 2024/07/04, 22:40:37
一句话经验
如何配置历史命令中有详细的时间戳

← 一句话经验 如何配置历史命令中有详细的时间戳→

最近更新
01
学习周刊-总第212期-2025年第21周
05-22
02
从赵心童世锦赛夺冠聊聊我的斯诺克情缘
05-16
03
学习周刊-总第211期-2025年第20周
05-15
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式