博客 / Linux/ 域名未备案使用国内CDN节点加速的方法

域名未备案使用国内CDN节点加速的方法

域名未备案使用国内CDN节点加速的方法

背景与原理

根据中国大陆的互联网管理规定,使用国内 CDN 服务通常要求加速的域名已完成 ICP 备案。对于未备案的域名,直接接入国内 CDN 节点会遇到阻碍。

一种可行的技术方案是:利用一个已备案的域名(通常为其二级域名)作为“桥梁”。具体原理如下:

  1. 在服务器上为已备案的二级域名(例如 static.example.com)新建一个虚拟主机(vhost)。
  2. 配置该虚拟主机,使其对静态资源(如图片、CSS、JS 文件)的请求反向代理到未备案的主站域名。
  3. 将已备案的二级域名接入国内 CDN 服务。
  4. 通过修改网站程序,将页面中对主站静态资源的引用,替换为通过该二级域名(或 CDN 域名)访问。

最终效果是:用户访问网站时,动态内容由主站直接提供,而静态资源则通过已备案的二级域名经由国内 CDN 加速分发,从而绕过了对主站域名的备案检查。

Nginx 服务器配置

在主站 Nginx 配置中,为已备案的二级域名添加一个独立的 server 块。以下为关键配置示例,请根据实际情况修改域名和路径。

# 绑定一个已备案二级域名,反向代理静态资源,用于接入国内CDN
server {
    listen 80;
    # 如需HTTPS,请在此处配置SSL证书
    server_name static.beiandomain.com; # 替换为你的已备案二级域名
    index index.html index.htm index.php default.html default.htm default.php;
    root /data/wwwroot/yourwebsitedomain.com; # 替换为你的主站网站根目录

    # 静态资源代理(关键配置)
    location ~* .(js|css|png|jpeg|jpg|gif|bmp|ico|ogg|ogv|svg|svgz|eot|otf|woff|woff2|mp4|ttf|rss|atom|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|rtf)$ {
        add_header Access-Control-Allow-Origin *; # 解决字体等资源的跨域问题
        add_header Access-Control-Allow-Headers X-Requested-With;
        add_header Access-Control-Allow-Methods GET,OPTIONS;
        proxy_pass http://127.0.0.1; # 代理到本地。如果主站强制HTTPS,可改为 https://127.0.0.1
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_redirect off;
        proxy_set_header Host yourwebsitedomain.com; # 必须修改为主站的真实域名
        expires max; # 设置长期浏览器缓存
    }

    # 为静态域名设置特定的robots.txt,防止搜索引擎抓取
    location = /robots.txt {
        rewrite ^ /resrobots.txt last;
    }

    # 非静态资源请求(如文章页面)重定向回主站
    location / {
        if ($request_uri !~* .(js|css|png|jpeg|jpg|gif|bmp|ico|ogg|ogv|svg|svgz|eot|otf|woff|woff2|mp4|ttf|rss|atom|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|rtf)$) {
            rewrite ^(.*)$ $scheme://yourwebsitedomain.com$1 permanent; # 替换为主站域名
        }
    }

    # 禁止访问隐藏文件
    location ~ /. { deny all; access_log off; log_not_found off; }
    access_log off;
}

创建屏蔽搜索引擎的 robots.txt

在网站根目录创建一个名为 resrobots.txt 的文件,内容如下,以防止搜索引擎通过静态域名索引非静态内容。

User-agent: *
Allow: /robots.txt
Allow: /wp-content/
Allow: /*.png*
Allow: /*.jpg*
Allow: /*.jpeg*
Allow: /*.gif*
Allow: /*.bmp*
Allow: /*.ico*
Allow: /*.js*
Allow: /*.css*
Disallow: /

WordPress 静态资源替换

配置好服务器后,需要修改 WordPress 的输出,将页面中的静态资源链接替换为通过 CDN 域名访问。将以下代码添加到主题的 functions.php 文件中。

function custom_static_cdn() {
    function rewrite_static_urls($html) {
        $domain = 'yourwebsitedomain.com'; // 主站域名,点号需要转义
        $static_cdn_domain = 'cdn.yourstaticdomain.com'; // 替换为你的CDN域名或已备案二级域名
        // 正则替换静态资源URL
        $html = preg_replace(
            '/http(s|)://'.$domain.'/wp-([^"']*?).(jpg|png|gif|bmp|jpeg|css|js)/i',
            '//'.$static_cdn_domain.'/wp-$2.$3',
            $html
        );
        return $html;
    }
    if (!is_admin()) { // 仅在前台页面生效
        ob_start('rewrite_static_urls');
    }
}
add_action('init', 'custom_static_cdn');

注意: 上述代码仅替换了 /wp- 路径下的部分常见静态文件。如果你的主题或插件将静态文件存放在其他路径,需要相应地修改正则表达式。

后续步骤与注意事项

  1. 配置 CDN: 将已备案的二级域名(static.beiandomain.com)添加到你所选的国内 CDN 服务(如阿里云 CDN、腾讯云 CDN 等),并将其源站设置为你的服务器 IP 地址。
  2. 修改替换代码: 在 WordPress 的替换函数中,将 $static_cdn_domain 变量值改为 CDN 服务商提供的加速域名,或者继续使用已备案的二级域名(如果 CDN 支持回源到该域名)。
  3. 测试: 部署完成后,请务必检查网站页面,确保静态资源(如图片、样式表)是否已成功通过新的 CDN 域名加载,同时动态功能正常。
  4. 风险提示: 此方法依赖于技术配置,存在一定不确定性。国内 CDN 服务商的政策可能随时调整,严格来说可能不符合其服务条款。请自行评估相关风险。
  1. avatar
    萤火虫儿

    请问,其他如帝国CMS可以采用这种方法吗???
    我现在就是站都在国外主机上,现在速度特慢,想请教如何使用国内CDN?谢谢

    1. 理论上是可行的 实现思路相同 但是源码不同

      1. 怎么操作,第一步绑定反向代理没搞懂

        1. 按我的笔记操作即可

  2. 怎么用的,没看懂.....

    1. 按我的笔记操作即可

  3. avatar
    天大苍紫

    你好,我看完这篇文章后,想请你帮忙配置一下,有偿
    QQ:1957853811 您开价就好

    1. 已加你qq

      1. 教我配置,给红包

        1. 加qq群“业余站长联盟” 我是群主

          1. 怎么加群呢,你还是加一下我QQ吧26619957

          2. 已加你好友

  4. 没明白,这样的话不就是还是通过备案的域名访问了吗?

    1. 对 你需要有一个备了案的域名解析一个二级域名到你web服务器
      或者请别人帮你解析一个别人已备案域名的二级域名到你web服务器的IP上(借用别人的)

      1. 所以标题“域名未备案使用国内CDN节点加速的方法”是什么意思呢?
        我有一个备案域名A 一个未备案域名B
        现在想把未备案的B解析到服务器,然后加cdn
        但是根据你的意思,把A解析到服务器,让用户访问A...
        请问哪里来的“域名未备案使用国内CDN节点加速的方法” ?整个过程跟未备案的B没有任何关系啊,也没有实现未备案域名使用国内节点加速。

        1. 服务器新增一个vhost绑定已经备案域名的二级域名对主站内容做反向代理(只代理静态文件),然后用这个已备案域名去接入CDN即可,实际上两个站用的是相同目录

        2. 你文章步骤来吧 肯定能行的 我已经成功应用了的

  5. 老哥我想问一下,按照这个方法操作,是不是访问未备案域名的时候会转到已备案的二级域名上啊?

    1. 不会 只是静态资源是经过cdn加速,网页还是原来的url

  6. 你好 我主站是apache的 可以教我配置吗 有偿 加我qq 931922545

  7. avatar
    就是为了回复而已

    不知道你抄 Zhang.ge 还是他抄你的。

    1. 我抄他的 哈哈 记录下来备用
      不过现在没用了 日IP小于1万 根本不用上CDN
      香港主机完美解决 懒得折腾
      看我博客右侧推荐的ucloud的香港主机
      现在主机和带宽便宜了 少抽两包烟 就够用了

  8. 操作好像不行了,不知道是不是自己步骤不对。

回复 33 取消回复

您的邮箱不会公开。必填项已用 * 标注。