华为云分流解析 + Cloudflare SaaS:实现网站全球加速,提升国内外访问体验与SEO排名

Cloudflare For Saas 可以让你将Cloudflare之外的域名接入Cloudflare, 享受其CDN服务, 并且可以自选IP, 加速国内访问, 本文以一个接入Cloudflare的域名作演示

准备

必须要有至少一个域名并接入Cloudflare, 并且开通Cloudflare for Saas服务(免费但需要绑定Paypal或者信用卡)

接入Saas

设置DNS解析, 可以使用A AAAA CNAME解析

解析的内容为你的服务器IP, 名字可以随意, 但不要是自己要接入Saas的域名

1

SSL/TLS->自定义主机名->添加自定义主机名, 根据如图配置

2

复制TXT解析配置, 回到DNS, 设置CNAME和TXT解析

3

4

设置DCV委派, 来到自定义主机名界面, 复制Cloudflare提供提供的域名(每个人都不一样)

5

接着回去设置CNAME记录, 记录名 _acme-challenge.你的自定义主机名 记录值 你的自定义主机名.你自己的字符.dcv.cloudflare.com

6

设置优选域名

等到主机名状态显示为有效时, 如图修改DNS为优选域名后保存

7

8

推荐的优选域名
time.is
ip.skk.moe
cloudflare.182682.xyz
csgo.com

使用华为云+Cloudflare SaaS实现国内外分流解析

教大家如何使用华为云来进行国内外分流解析

下文的CF即Cloudflare

分流解析的原因

尽管我们使用了CF SaaS加速网站, 但是因为CF糟糕的国内线路, 导致国内用户无法流畅访问

并且由于CF优秀的国际线路导致我们无法舍弃掉它, 所以我们就可以通过CF SaaS+分流解析来使国内用户走国内优化CDN, 国外用户走CF CDN

准备阶段

本文是在前文的基础上写的, 请先阅读前文来保证您能够正常配置

一个Cloudflare账户(需开启SaaS服务), 一个华为云DNS账户, 一个托管在Cloudflare的域名, 一个国内优化CDN(本文以DokiCDN为例)

托管子域名到华为云

打开我们的Cloudflare DNS管理页面, 为子域名添加NS记录, 并等待解析完成

ns1.huaweicloud-dns.com.
ns1.huaweicloud-dns.cn.
ns1.huaweicloud-dns.net.
ns1.huaweicloud-dns.org.

1

与此同时, 打开华为云DNS, 创建公网域名xxx.333375.xyz

这样就算是托管完毕

配置CDN

打开我们的CDN后台, 我们以DokiCDN的GoEdge系统为例

首先添加网站, 源站是你回源域名解析的值, 完成之后会给出一个你需要CNAME解析的域名

2

然后来到华为云添加记录, 设置分流解析, 中国大陆解析到国内优化CDN, 境外解析到回源域名

3

4

配置自动化SSL

配置CF的自动SSL

配置了DCV委派, 我们由于将NS修改到了华为云, 所以我们需要重新添加CNAME记录

配置GoEdge的自动SSL

本小段教程仅针对GoEdge等仅支持http验证的系统, 如果你的CDN系统支持DNS账户验证, 建议直接使用DNS账户验证

由于GoEdge系统仅支持http验证申请证书, 并且我们仅在境内解析了DokiCDN, 而Let’s Encrypt验证http的服务器在国外, 所以在以上条件结合下我们需要特殊的配置来申请证书

我的解决方案是通过CF Workers路由来验证

首先打开Cloudflare的Workers, 点击创建Workers

5

6

7

然后编辑代码, 记得将 cdn.yourcdn.com 和 xxx.333375.xyz 修改为你自己的, 点击保存部署(如果是手机操作, 一定要在粘贴之后将最后一行的两个符号删除)

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url)
  
  if (url.pathname.startsWith('/.well-known/acme-challenge/')) {
    const targetUrl = `http://cdn.yourcdn.com${url.pathname}${url.search}`  //修改为你的CDN分配的域名
    
    const modifiedHeaders = new Headers(request.headers)
    modifiedHeaders.set('Host', 'xxx.333375.xyz')  //修改为你的网站的域名
    
    const modifiedRequest = new Request(targetUrl, {
      method: request.method,
      headers: modifiedHeaders,
      body: request.method !== 'GET' && request.method !== 'HEAD' ? request.body : null
    })
    
    try {
      const response = await fetch(modifiedRequest)
      
      const modifiedResponse = new Response(response.body, {
        status: response.status,
        statusText: response.statusText,
        headers: response.headers
      })
      
      return modifiedResponse
    } catch (error) {
      return new Response('Proxy Error: ' + error.message, { 
        status: 502,
        statusText: 'Bad Gateway'
      })
    }
  }
  
  return new Response('Not Found', { 
    status: 404,
    statusText: 'Not Found'
  })
}

保存并退出后点击 设置->添加域和路由->路由, 添加路由 xxx.333375.xyz/.well-known/acme-challenge/* 并将 xxx.333375.xyz 修改为你自己的, 然后点击添加路由

8

9

之后回到CDN管理页面, 申请证书并保存

10

THE END