线上多域名实战

这篇具有很好参考价值的文章主要介绍了线上多域名实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文博主给大家分享线上多域名实战,当线上主域名不可用的情况下,启用备用域名完成网站高可用保障。

网站的高可用性一直是网站运维的重中之重。一旦网站宕机,不仅会造成巨大的经济损失,也会严重影响用户体验。备份域名就是一种实现网站高可用的重要手段。通过备份域名,可以在主域名不可访问时快速切换域名,保证网站正常运行。

一、前情回顾

博主上个星期,线上项目突然出现了少量用户无法打开项目网站,技术支持联系技术人员(也就是博主我)在用户电脑上复现了这一情况。

经过博主排查,发现在客户电脑访问主域名时,会出现连接超时,通过 curl 进一步分析连接详情,举例如下:

C:\Users\16697>curl -v www.wayn.com

* Uses proxy env variable http_proxy == 'http://11.22.11.22:4780'
*   Trying 11.22.11.22:4780...

发现线上主域名在用户电脑上返回的 CDN 节点 11.22.11.22 存在访问不通的情况。博主便跟运维沟通 CDN 节点不通的问题,运维回复是 CDN 节点不通是无法避免的,要看 CDN 厂商对于用户的覆盖情况,建议线上项目使用多域名,并且每个域名使用不同的 CDN 厂商,最大限度避免主备域名都不可用。

OK,得到的运维的意见,我们开始着手做多域名实现方案。

二、购买备用域名

实现域名高可用解决方案,首先需要准备一到两条与主域名功能和形式相似的备份域名。如下

主域名
www.wayn.com

备用域名一
bak1.wayn.com

备用域名二
bak2.wayn.com

购买备份域名后,需要注意一下两点:

  1. 需要在域名服务商那设置DNS记录,将主域名和备份域名指向同一个IP地址。同时也需要为两个域名设置相同的CDN加速和安全证书,保证用户访问体验一致。
  2. 将备份域名的网站配置(nginx配置文件)与主域名保持一致。确保使用备份域名也可以访问我们的网站。

三、主备域名切换实战

这里我们介绍一下通过 JavaScript 代码来实现网站的主备域名如何进行切换。

JavaScript 实现域名切换的流程如下:

  1. 在页面启动时,首先发起对主域名的请求,判断其是否能够正常响应。如果启动时主域名不可访问,就会访问备份域名。针对每个备用域名每隔一秒发送三次请求,如果都能访问成功则认为备用域名可用。代码如下:
// ES6 的模块引入方式
import fetch from 'node-fetch'

const domain = 'https://www.wayn111.com'
const bakDomains = ['http://bak1.wayn.com', 'http://baidu.com']

masterDomainCheck()

// 主域名检测,如果不可用会检查备用域名是否可用
async function masterDomainCheck() {
  try {
    await fetch(domain)
    console.log('主域名启用成功')
  } catch (e) {
    // console.log(e)
    try {
      await getBakDomain()
      console.log('备用域名可用')
    } catch (e) {
      console.log('备用域名也不可用')
    }
  }
}

// 访问备用域名,返回其中可用的一个域名
async function getBakDomain() {
  const apiPromiseList = []
  for (let i = 0; i < bakDomains.length; i++) {
    apiPromiseList.push(
      new Promise((resolve, reject) => {
        bakDomainCheck(bakDomains[i], 3, resolve, reject)
      })
    )
  }
  return await Promise.any([...apiPromiseList])
}

// 域名检测逻辑
async function bakDomainCheck(url, count, resolve, reject) {
  console.log(count)
  if (count > 0) {
    try {
      await fetch(url)
      bakDomainCheck(url, --count, resolve, reject)
    } catch (e) {
      console.log('e')
      reject(e)
    }
  } else {
    console.log(`bak domain:${url} access success`)
    resolve({ url, count })
  }
}

以上代码经过博主实测,大家感兴趣可以将代码拷贝在本地跑一遍。

  1. 如果主域名启动时正常,则开始定时监测主域名的可访问性。每30秒发起一次请求,判断主域名的HTTP状态码是否为200。
// 主域名正常,开始定时监测
setInterval(() => {
  fetch('https://www.wayn111.com')
    .then(res => {
      if (res.status !== 200) {
        switchDomain() 
      }
    })  
}, 30000)
  1. 一旦监测到主域名故障,开始调用 JavaScript 函数,找到页面所有包含主域名的链接,并将其替换为备份域名。
// 开始替换页面内域名为备份域名
function switchDomain() {
  let links = document.querySelectorAll('a')
  for (let i=0; i<links.length; i++) {
    if (links[i].href.indexOf('https://www.wayn111.com') > -1) {
      links[i].href = links[i].href.replace('https://www.wayn111.com'
              , 'https://bak1.wayn.com')
    }
  }
}
  1. 继续定时监测主域名,在主域名恢复正常时,调用 JavaScript 函数将备份域名的链接替换回主域名。
// 定时检查主域名故障恢复,一旦恢复再切回主域名  
setInterval(() => {
  fetch('https://www.wayn111.com')
    .then(res => {
      if (res.status === 200) { 
        switchDomainBack()
      }
    })  
}, 5000)

function switchDomainBack() {
  let links = document.querySelectorAll('a')
  for (let i=0; i<links.length; i++) {
    if (links[i].href.indexOf('https://bak1.wayn.com') > -1) {
      links[i].href = links[i].href.replace('https://bak1.wayn.com'
              , 'https://www.wayn111.com')
    }
  }
}
  1. 这样通过 JavaScript 检测域名状态与自动切换,可以最大限度减少域名切换造成的访问中断时间,确保网站高可用。

希望大家通过这个案例,能对线上用多域名来实现高可用网站有一个较为全面的认知。网站过于依赖某单一域名存在潜在风险,备份域名的引入主要是解决少数场景下用户访问不通我们网站的问题。

最后感谢大家阅读,喜欢的朋友可以点赞加关注,你的支持将是我的更新动力😘。

公众号【waynblog】每周更新技术干货、线上项目实战经验、高效开发工具等。文章来源地址https://www.toymoban.com/news/detail-421758.html

到了这里,关于线上多域名实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx 配置多域名多站点 Ubuntu

    nginx 的配置文件在 /etc/nginx 目录下,它的默认内容是这样的 讲一下如何一个服务器配置多域名多站点。 多站点的实现方式有几种: 多域名、多站点 多端口、多站点 比如 a.com b.com 都指向了服务器 1.2.3.4 ,我们需要实现的是在访问这两个域名的时候出现的是不同的网站,他们

    2024年02月14日
    浏览(49)
  • PositiveSSL和Sectigo的多域名证书

    首先,我们要知道PositiveSSL是Sectigo旗下的子品牌,提供多种类型的SSL数字证书,包括DV基础型的多域名SSL证书。Sectigo的SSL证书产品同样比较丰富,不仅有DV基础型多域名SSL证书,还有OV企业型以及EV增强型的多域名SSL证书。今天就随SSL盾小编了解PositiveSSL和Sectigo旗下的多域名

    2024年01月25日
    浏览(58)
  • vue 封装request请求 多域名访问

    1.需求 我现在一个项目 有可能涉及到的数据多 服务器压力大,所以需要配置多个服务 就出现了一个问题,当第一个服务 调用不通或者失败了 立马换下一个域名调用 接口都是一一样的 就是 前段部分的域名不同 2.实现 3.总结 我这个域名目前配置了两个域名 当前就是第一个域

    2024年02月20日
    浏览(55)
  • 解决dedecms多域名和站点的绑定的问题

    dedecms可以实现多级域名,不同域名的绑定,而且仅仅一套程序就可以搞定,这样以后用dede做站群是最好不过了,同一个主题的站,就只用一套dede来做。闲话少说,自己在网上找了很多教程,发现很多都很残旧的了,要么是老程序,要么就是不行的。 先分享一下在网上找的这

    2024年02月02日
    浏览(58)
  • 如何构建多域名HTTPS代理服务器转发

    在当今互联网时代,安全可靠的网络访问是至关重要的。本文将介绍如何使用SNI Routing技术来构建多域名HTTPS代理服务器转发,轻松实现多域名的安全访问和数据传输。 SNI代表\\\"Server Name Indication\\\",是TLS协议的扩展,用于在HTTPS握手过程中传递目标服务器的域名信息。通过SNI R

    2024年02月10日
    浏览(50)
  • nginx快速部署一个网站服务 + 多域名 + 多端口

    👨‍🎓 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入! 🐋 希望大家多多支持,我们一起进步!😄 🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏

    2024年02月08日
    浏览(41)
  • nginx部署以及反向代理多域名实现HTTPS访问

    直接进入/opt/nginx_main/nginx-info里面创建了 选择域名 然后配置免费ssl证书 证书设置我们需要的域名 然后申请之后稍等一段时间 之后点击下载,下载nginx的证书文件 一个pem,一个key 然后把下载的证书放到上面的 ssl路径 记录好位置即可,步骤 2.5会用到 1.先进入阿里云的数字证

    2024年02月12日
    浏览(49)
  • 【五一创作】多域名环境和Office 365混合部署方案

    目录   一、多域名环境是什么? 二、Office 365是什么? 三、多域名环境与Office 365的结合 总结   多域名环境指的是一个企业拥有多个域名,这些域名可能隶属于不同的子公司、部门或者品牌,但是都归属于同一个母公司。例如,一个中国电信集团旗下有中国电信、中国移动、

    2024年02月02日
    浏览(43)
  • 企业型多域名SSL证书怎么申请?有哪些流程?

    随着越来越多的交流和交易发生在互联网上,保护敏感数据和建立用户信任成为企业的首要任务。HTTPS协议是一种关键的安全措施,用于保护数据传输的机密性和完整性。为了实施HTTPS,企业可以选择安装SSL证书。而对于需要保护多个域名的企业,企业型 多域名SSL证书 是理想

    2024年02月06日
    浏览(47)
  • 踩坑日记-nginx server_name配置多域名的坑

    项目配置了多个域名,如下,php 代码中有获取 $_SERVER[\\\'SERVER_NAME\\\'] 的值。 当访问 a.demo.com 时,其获取的值是符合预期的。但是当访问 b.demo.com 时,其获取的值还是 a.demo.com ,导致代码中的判断出现错误。 当 nginx 的一个 server 节点下,server_name 配置多个域名时,$server_name 变量

    2024年02月11日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包