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

  • A+
所属分类:LNMP

众所周知,要使用国内免费CDN加速自己的网站要求网站域名已备案
之前张戈分享了一个不用备案也可以用国内CDN的方法,前提是要准备个其他已经备案域名的二级域名
原理:服务器新增一个vhost绑定已经备案域名的二级域名对主站内容做反向代理(只代理静态文件),然后用这个已备案域名去接入CDN即可,实际上两个站用的是相同目录

今天对某个未备案域名的网站进行了部署,记性不好,记录一下步骤以备将来再次使用:

1\在你主网站的配置文件中加入以下配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#绑定一个已备案二级域名,反向代理静态资源,在这个反向代理上面套一层国内CDN,解决未备案无法使用国内CDN问题
server
    {
        listen 80;
        # HTTPS配置略
        server_name static.beiandomain.com; # 改成你实际已备案的二级域名(这个就是新建主机时绑定的域名)
        index index.html index.htm index.php default.html default.htm default.php;
        root  /data/wwwroot/yourwebsitedomain.com; # 需要CDN加速的网站
        # 图片等静态资源请求代理到本地主站(关键配置)
        location ~* .*\.(js|css|png|jpeg|jpg|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|bmp|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,避免主站加了非https协议的跳转配置,导致不成功。
                proxy_set_header  X-Forwarded-For $remote_addr;
                proxy_redirect off;
                proxy_set_header Host yourwebsitedomain.com; # 这里改为实际主站域名(必须)
                expires max;                       # 设置浏览器304缓存为最长期限
        }
        # 为这个二级域名额外设置一个robots文件
        location ~ (robots.txt) {
                rewrite /robots.txt /resrobots.txt last;  # 在网站根目录新增一个resrobots.txt,内容和七牛CDN类似,禁止搜索引擎抓取非静态资源(怎么写接着看下面)
        }
        # 如果通过静态域名访问的是非静态资源,比如访问了我们的文章页面,则跳到主站对应的页面。
        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|bmp|rtf))
                {
                rewrite ^(.*)$ $scheme://yourwebsitedomain.com$1 permanent; # yourwebsitedomain.com修改为实际主站域名
            }
        }
        location ~ /\. { deny  all; access_log off; log_not_found off; }
        access_log off;
}

根目录下新增一个resrobots.txt 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
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的functions.php文件中加入cdn代理设置

1
2
3
4
5
6
7
8
9
10
11
12
13
function QiNiuCDN(){
    function Rewrite_URI($html){
        $domain = 'yourwebsitedomain\.com';   //填写主站域名,小数点前需要加上反斜杠转义
        $static = 'res.zgboke.com'; //填写二级静态域名(使用第三方的CDN加速后,这里需要替换成你CDN的名字,而原来已备案的二级域名则为源站)
        //更多静态资源需要替换,可以将后缀加到后面的括号,使用分隔符分割
        $html = preg_replace('/http(s|):\/\/'.$domain.'\/wp-([^"\']*?)\.(jpg|png|gif|bmp|jpeg|css|js)/i','//'.$static.'/wp-$2.$3',$html);
        return $html;
    }
    if(!is_admin()){
        ob_start("Rewrite_URI");
    }
}
add_action('init', 'QiNiuCDN');

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:22   其中:访客  18   小编  4

    • avatar 就是为了回复而已 0

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

        • avatar 老牛 3

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

        • avatar 33 0

          哈哈

          • avatar ciye 0

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

              • avatar 老牛 3

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

              • avatar lll 1

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

                  • avatar 老牛 3

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

                      • avatar lll 1

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

                          • avatar 老牛 3

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

                            • avatar 老牛 3

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

                        • avatar 天大苍紫 0

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

                            • avatar 老牛 Admin

                              @天大苍紫 已加你qq

                                • avatar RC 1

                                  @老牛 教我配置,给红包

                                    • avatar 老牛 3

                                      @RC 加qq群“业余站长联盟” 我是群主

                                        • avatar RC 1

                                          @老牛 怎么加群呢,你还是加一下我QQ吧26619957

                                          • avatar 老牛 3

                                            @RC 已加你好友

                                    • avatar 九流 1

                                      怎么用的,没看懂…..

                                        • avatar 老牛 Admin

                                          @九流 按我的笔记操作即可

                                        • avatar 萤火虫儿 0

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

                                            • avatar 老牛 Admin

                                              @萤火虫儿 理论上是可行的 实现思路相同 但是源码不同

                                                • avatar 1103 1

                                                  @老牛 怎么操作,第一步绑定反向代理没搞懂

                                                    • avatar 老牛 Admin

                                                      @1103 按我的笔记操作即可