• 创建Cloudflare CDN


     

    背景说明:

    XX全球版项目CDN,

    原有改之前:主CDN为Akamai,备CDN为Cloudflare。

    计划改之后:主CDN为Cloudflare,备CDN为Akamai。

    原因:Akamai CDN的流量成本大概是3毛多1GB是比较贵的,比Cloudflare贵很多,故现在为了节省成本,经领导同意,计划将主CDN切为Cloudfalre,备的CDN切为Akamai。从Akamai切为Cloudflare其CDN成本可以节约一半左右的费用。

    注意:文档中项目敏感信息已打码。文档中所有域名使用:www.baidu.com代替

    感谢辉哥提供的资料

    参考文档

    # Cloudflare CDN相关api的文档:
    https://api.cloudflare.com/#getting-started-requests
    https://api.cloudflare.com/#zone-purge-all-files
    https://api.cloudflare.com/#zone-purge-files-by-url
    https://api.cloudflare.com/#zone-purge-files-by-cache-tags,-host-or-prefix

         

    1.上传或创建SSL域名证书到Cloudflare

      注:如果上传的是自有证书,要注意域名证书的有效期,在到期之前要及时续期并上传新的续期后的域名证书到Cloudflare。

     

     

    2.创建Cloudflare CDN

      

     

    3.测试Cloudflare CDN

      正常如上创建完成了,接着就可以进行测试和域名解析了。

    1、测试获取绑定的随机Cloudflare CDN边缘IP
     注:Cloudflare边缘CDN为以.cdn.cloudflare.net 结尾,所以如下 dig时要加上 .cdn.cloudflare.net 
    [root@wyh-test ~]# dig www.baidu.com.cdn.cloudflare.net +short
    xx.18.9.27
    xx.18.8.27
      
    2、测试http、 https
    #–resolve 参数后的 IP 填写上条命令获取的任意一个边缘ip即可
    [root@wyh-test ~]#
    #测试 http 80
    curl http://www.baidu.com/HotfixAssets/test/test9.log --resolve www.baidu.com:80:xx.18.9.27 -svo /dev/null
     
    #测试 https 443
    [root@wyh-test ~]#
    curl https://www.baidu.com/HotfixAssets/test/test9.log --resolve www.baidu.com:443:xx.18.9.27 -svo /dev/null

    4.配置域名解析到Cloudflare CDN's CNAME

      通过CNAME记录将流量指向Cloudflare CDN,具体操作如下:

      登陆域名解析网站(比如AWS域名解析,阿里云解析,腾讯云域名解析网站等,根据实际的来),这里域名baidu.com是AWS S3域名解析。

      则登录AWS S3域名解析,将www.baidu.com解析改为CNAME类型,值为www.baidu.com.cdn.cloudflare.net

     

    5.Cloudflare API进行Cloudflare CDN自动刷新

      首先,要获取API授权,具体见:通过Cloudflare API进行CDN刷新

      自动或者手动刷新根据自己实际情况选择。(脚本的实现只是提供一个思路,要根据实际项目情况的目录来更改)

     

    5.1 配置腾讯云云函数调用API自动刷新

     

    5.2 配置脚本调用API来刷新

      万一云函数自动刷新有问题,可以使用此脚本方法进行刷新。

    1.    [root@xx ~]# cat /data/infra/scripts/cloudflare_cdn_refresh_dir.py
    2.    # -*- coding: UTF-8 -*-
    3.    # version: by san at 20201202
    4.    # cloudflare refresh api
    5.    import json
    6.    import requests
    7.    import sys
    8.    import copy
    9.    
    10.    # 针对目录刷新函数
    11.    def send_msg_dir(api, url):
    12.        headers = {'Content-Type': 'application/json; charset=utf-8','X-Auth-Email': 'xx@qq.jp', 'X-Auth-Key': '自己的密钥'}
    13.        data = {
    14.                     "prefixes": url
    15.           }
    16.        r = requests.post(api, data=json.dumps(data), headers=headers)
    17.        return r.text
    18.    
    19.    # 针对文件刷新函数
    20.    def send_msg_url(api, url):
    21.        headers = {'Content-Type': 'application/json; charset=utf-8','X-Auth-Email': ' xx@qq.jp', 'X-Auth-Key': '自己的密钥'}
    22.        data = {
    23.                     "files": url
    24.           }
    25.        r = requests.post(api, data=json.dumps(data), headers=headers)
    26.        return r.text
    27.    
    28.    if __name__ == '__main__':
    29.        #url_dir = ["www.baidu.com/HotfixAssets/Global_OBT"]
    30.        url_dir = ["www.baidu.com/HotfixAssets/Global_7.0"]
    31.        url_file = copy.deepcopy(url_dir)
    32.        url_file[0] = "https://" + url_file[0]
    33.        mversion=sys.argv[1]
    34.        version=sys.argv[2]
    35.        ios=sys.argv[3]
    36.        number=sys.argv[4]
    37.        url_dir[0] = url_dir[0] + "/" + mversion + "." + version + "/" + ios + "/" + number
    38.        url_file[0] = url_file[0] +  "/" + mversion + "." + version + "/" + ios + "/" + "PkgVersion.json"
    39.        print(type(url_dir),url_dir,type(url_file),url_file)
    40.        api = 'https://api.cloudflare.com/client/v4/zones/2869a40871835d9e79a96b89354be1c3/purge_cache'
    41.        print(send_msg_url(api, url_file))
    42.        print(send_msg_dir(api, url_dir)

    6.注意事项

      1.实际是一定要先创建一个测试的Cloudflare CDN域名 www-test.baidu.com,测试没问题,然后再进行如上步骤的操作。

      2.如果上传的是自有证书,要注意域名证书的有效期,在到期之前要及时续期并上传新的续期后的域名证书到Cloudflare。

    作者:小家电维修

    相见有时,后会无期。

  • 相关阅读:
    Eclipse安装代码反编译插件Enhanced Class Decompiler
    使用idea创建web项目
    shell编程学习笔记(十二):Shell中的break/continue跳出循环
    shell编程学习笔记(十一):Shell中的while/until循环
    windows环境下安装zookeeper(仅本地使用)
    解决base64-encoded secret key cannot be null or empty问题
    不就一个上传图片功能吗,为什么要搞得那么复杂?
    解决WARN警告:Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended
    Jmeter发送jdbc请求(操作mysql)
    Jmeter-ForEach控制器
  • 原文地址:https://www.cnblogs.com/lizexiong/p/14851357.html
Copyright © 2020-2023  润新知