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

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

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • 网站状态 (opens new window)
    • json2go (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
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancker
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
推广
  • 本站索引

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

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • 网站状态 (opens new window)
    • json2go (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
  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • Prometheus

  • Grafana

  • 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。

现在,我在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#最佳实践
上次更新: 2022/08/19, 09:49:20

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

最近更新
01
学习周刊-总第92期-2023年第05周
02-03
02
极客时间课程推荐
02-02
03
Vuepress配置rss订阅功能
02-01
更多文章>
Theme by Vdoing | Copyright © 2017-2023 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式