【最佳实践】域名备份解决方案(域名-+DNS+记录+SSL)

  备案动态     |      2023-09-28
【最佳实践】域名备份解决方案(域名 +DNS+记录+SSL)

随着互联网技术的快速发展和普及,越来越多的企业和个人开始在网上开展业务和交流。域名作为互联网上的“门牌号”,在互联网中发挥着至关重要的作用。但由于网络攻击、服务器故障、意外错误等多种原因,域名解析可能会受到影响,导致网站无法正常访问,给企业带来巨大损失。

为了应对这些潜在风险,采用域名备份方案成为了有效的解决方案。通过注册备份域名、完成备份域名ICP备案、设置域名别名(分析同步)等,可以保证备份域名在出现问题时能够及时接管业务配合主域名,保证网站的正常运行,减少域名解析带来的故障。即将到来的损失。

在金融、电商、政务等特定行业和场景中,对网络稳定性和安全性的要求更高。因此,采用域名备份方案具有重要的现实意义。

应用场景

本文将指导您完成域名备份解决方案,满足特定行业场景下的监管和高可用需求,应对特定场景下域名无法解析的风险。

操作步骤及原理

由于各个用户的业务系统存在差异,本文仅提供一般思路。如果您需要具体解决方案,请联系您的客户经理

备份域名注册

注册不同后缀的域名如:com+.cn,cn作为备份域名,腾讯云支持.cn等上百种后缀,cn的顶级域名服务器域名在中国大陆,在一定情况下,可以保证国内的正常解析和访问。建议注册.cn作为备份域名。

完成备份域名的 ICP 备案

备份域名需与主域名一致,并与相关接入服务商完成备案或访问记录,确保备份域名能够正常访问。

腾讯云备案可参考:https://cloud.tencent.com/document/product/243

请注意:完成新备案后,请与其他服务商(如有)同时完成ICP备案或白名单处理,以免影响正常访问。

域名别名设置(DNS)

DNSPod支持域名别名功能。您可以在当前域名(主营业务域名)下绑定多个别名。域名别名使用完全相同的解析记录,避免重复操作,并共同使用DNS解析套餐服务。

完成别名绑定后,请按照提示修改域名的DNS服务器。高级版客户可以联系您的客户经理获取备用DNS服务器地址。

为备份域名申请 SSL 证书

此步骤有两种选择:分别为备份域名和主业务域名申请SSL证书,或者申请包括主业务域名和备份域名的多域证书。

如果您的业务系统允许,建议同时申请国密证书备份。

分别申请域名证书

您可以到腾讯云购买多域名证书:https://buy.cloud.tencent.com/ssl,完成购买后提交申请,分别针对主业域名和备份域名提交证书申请

申请多域名证书

您可以到腾讯云购买多域名证书:https://buy.cloud.tencent.com/ssl,完成购买后提交申请,绑定的域名填写主营业务域名证书,其他域名填写备份域名。

后端系统适配

需要对您的业务系统进行适配和改造,确保通过主域名和备份域名可以访问相同的服务。这里以nginx为例,将主域名和备份域名绑定到同一个站点:

以下适用于申请多域证书的情况:

服务器{ 监听443 ssl;听[:]:443 ssl;第443章快听听[:]:443快;听80;听[:]:80; # 将主域名和备份域名绑定到同一个Site server_name resources.xxx.cn resources.xxx.com; http2 开启; add_header Alt-Svc 'h3=':443';马=86400'; add_header 严格传输安全'max-age=63072000;包括子域;预载'; add_header Vary '接受';位置/{default_type应用程序/json; proxy_pass https://127.0.0.1:8080; proxy_set_header 主机resources.xxx.cn; proxy_set_header 接受$http_accept; proxy_no_cache 1; proxy_cache_bypass 1; } ssl_certificate /etc/ssl/nginx/fullchain.crt; ssl_certificate_key /etc/ssl/nginx/private.key; ssl_session_timeout 5m; ssl_协议TLSv1.1 TLSv1.2 TLSv1.3;如果您为每个域名单独申请证书,请将域名放在不同的服务器块中,并指定对应的证书:

服务器{ 监听443 ssl;听[:]:443 ssl;第443章快听听[:]:443快;听80;听[:]:80;服务器名resources.xxx.cn; http2 开启; add_header Alt-Svc 'h3=':443';马=86400'; add_header 严格传输安全'max-age=63072000;包括子域;预加载'; add_header Vary '接受';位置/{default_type应用程序/json; proxy_pass https://127 .0 .0.1:8080; proxy_set_header 主机resources.xxx.cn; proxy_set_header 接受$http_accept; proxy_no_cache 1; proxy_cache_bypass 1; ssl_certificate /etc/ssl/nginx/fullchain.crt; ssl_certificate_key /etc/ssl/nginx/private.key; ssl_session_timeout 5m; ssl_协议TLSv1.1 TLSv1.2 TLSv1.3; } 复制服务器{ 监听443 ssl;听[:]:443 ssl;第443章快听听[:]:443快;听80;听[:]:80;服务器名resources.xxx.com; http2 开启; add_header Alt-Svc 'h3=':443';马=86400'; add_header 严格传输安全'max-age=63072000;包括子域;预加载'; add_header Vary '接受';位置/{default_type应用程序/json; proxy_pass https://127.0.0.1:8080; proxy_set_header 主机resources.xxx.cn; proxy_set_header 接受$http_accept; proxy_no_cache 1; proxy_cache_bypass 1; } ssl_certificate /etc/ssl/nginx/fullchain. crt; ssl_certificate_key /etc/ssl/nginx/private.key; ssl_session_timeout 5m; ssl_协议TLSv1.1 TLSv1.2 TLSv1.3; } 复制:

APP 或其他场景增加备份策略

当主域名或备份域名因解析原因无法访问时,切换到其他域名,以下代码为简单示例,仅供参考:

这个简单的Java 代码(客户端)实现了以下功能:

检查两个域名(A域名和B域名)是否可以解析。使用InetAddress.getByName() 方法尝试解析域名。如果无法解决,则会捕获UnknownHostException。实现A域名和B域名的相互备份。当其中一个域名无法解析时,会自动切换到另一个可解析的域名。轮询访问A域名和B域名。当两个域都可解析时,使用计数器来实现轮询。根据计数器的奇偶校验,依次返回A域名或B域名。导入java.net.InetAddress;导入java.net.UnknownHostException;公共类DomainSwitcher { private static int counter=0;公共静态无效主(字符串[] args){字符串primaryDomain='example-a.com'; String backupDomain='example-b.com'; for (int i=0; i 10; i++) { String targetDomain=getAvailableDomain(primaryDomain, backupDomain); } System.out.println('访问域名:' + targetDomain); } } private static String getAvailableDomain(StringdomainA, StringdomainB) { boolean isDomainAAvailable=checkResolvable(domainA); boolean isDomainBavailable=checkResolvable(domainB); if (isDomainAAvailable isDomainBAvailable) { counter++;返回(计数器2==0)?域A:域B; } else if (isDomainAAvailable) { return 域A; } else if (isDomainBavailable) { return 域B; } else { System.out.println('两个域都无法解析');返回空值; } } private static boolean checkResolvable(String domain) { try { InetAddress.getByName(domain); System.out.println('域名' + 域+ '可解析');返回真; } catch (UnknownHostException e) { System.out.println('域名' + 域+ '无法解析');返回假; } }} 复制:

效果验证

解析测试

测试解析返回相同的解析结果

root@VM-4-16-debian:~#挖掘resources.xxx.cn; DiG 9.18.16-1~deb12u1-Debian r2wind.cn;全局选项:+cmd;得到答案: -HEADER- 操作码:查询,状态:NOERROR,id:28903;标志:qr rd ra;查询:1,答案:1,权限:0,附加:0;问题部分:resources.xxx.cn。在一个;答案部分:resources.xxx.cn.60 IN A 61.151.182.254;查询时间:48毫秒;服务器:183.60.83.19#53(183.60.83.19)(UDP);时间:2023 年CST 8 月21 日星期一20:50:28; MSG 大小rcvd: 43root@VM-4-16-debian:~# dig resources.xxx.com; DiG 9.18.16-1~deb12u1-Debian r2wind.cn;全局选项:+cmd;得到答案: -HEADER- 操作码:QUERY,状态:NOERROR,id:28903;标志:qr rd ra;查询:1,答案:1,权限:0,附加:0;问题部分:resources.xxx .com。在一个;答案部分:resources.xxx.com。 60 在61.151.182.254;查询时间:48毫秒;服务器:183.60.83.19#53(183.60.83.19)(UDP);时间:2023 年CST 8 月21 日星期一20:50:29; MSG SIZE rcvd: 43 复制:

访问测试

主业务域名和备份域名返回相同的内容,可以提供相同的服务

主域名

备份域名

总结

域名备份解决方案实际上是针对极端场景的解决方案,包括但不限于顶级域名服务器故障、恶意篡改或删除域名等,但是这个方案不一定是最好的方案,可能会面临故障场景下如何实现有效域名切换的问题,所以除此之外,企业还可以探索更多的解决方案,比如引入HTTPDNS服务来实现域名的自定义解析等.或者在客户最后添加IP服务地址以了解详细信息等。

本文仅提供一种思路。实际业务系统的改造预计会比这更复杂,但要做好准备,尽可能避免因故障可能造成的重大业务损失。