转自 wu-kan:个人网站优化之旅

一年前我转投 Github Pages,开始了自己的新博客生活(详见一年前的一篇博客。由于 github page 原生支持 jekyll,在部署博客方面比较省心,我们只需要专注自己的博客内容即可。

然而,时间一长,还是有很多需求得不到满足:

  • 由于众所周知的原因,博客部署在国外服务器上,访问速度很慢
  • 网站没有备案,导致在百度搜索引擎上的排名不高
  • 想使用更加简短更加个性的域名(即我现在用的wu-kan.cn),也有利于 SEO

本文记录了我为了解决上述问题,是如何从一个坑掉进一堆更深的坑里去的。

购买域名

这一步是万恶之源…

国内比较大的域名服务商有阿里云和腾讯云等,我经过挑选最后在腾讯云上购买了这个新域名。域名的价格没有想象中的贵,就一口气买了十年。不过毕竟是 .cn 域名,非常贫穷的我要吃很长时间的土了…

买了域名之后,在腾讯云的控制台中将 wu-kan.cn@记录用 CNAME 解析到wu-kan.github.io,然后回到 GitHub 的 Setting 拉到下面找到 Github Pages 相关选项,将 Custom domain 改成 wu-kan.cn,随后我的新网址就可以访问了。

有了自己的域名之后还可以做很多有意思的事情,比如将邮箱记录解析到腾讯企业邮箱,这样就可以获得自己域名的邮箱了(比如我自己的i@wu-kan.cn,是不是又短又好记)。另外,平时校内作业要通过难记的 ip 提交到 ftp 网盘上,现在也可以用好记的域名来代替了。

唯一不好的是,换了新域名之后之前不蒜子的五万访问量统计清零了,有点心痛…又要从头开始了…

部署 Gitlab 镜像

然而,半个月之后,我发现自己的网站在百度上根本搜不到。打开百度抓取诊断工具,发现可以正常访问博客的 ip,但是返回403 Forbidden。查了一下,这是由于之前的利用百度统计导致的针对 Github 的 DDos 攻击事件,Github 屏蔽了百度蜘蛛对于 Github Pages 的爬取收录。

但是之前为啥直接使用https://wu-kan.github.io的博客就可以正常被收录呢?我猜测,百度的爬虫在针对github.io的二级域名进行爬取的时候会修改自己的 UA,而通过自己域名解析过去的页面爬取的时候则没有修改 UA。

那么如何解决呢?我选择利用 Gitlab 提供的 CI 服务自动部署镜像站。也可以使用别的代码托管平台,例如国内的码云 gitee 等,但是他们不能自动和我的 Github 仓库同步,需要针对 git 的 push 添加多个源。

在经过一番摸索之后,终于成功部署了 Gitlab 上的 CI 服务,于是现在单独把搜索引擎的流量解析到就好了。

可能有人要问,为啥不直接用 gitlab pages 或者别的平台呢?因为我体感上 Githab pages 提供的服务器更快一些。此外,我的项目已经在 Github 上混了一百多个 Star 了,也不好随随便便就迁移是不是…

网站备案+nginx 反代

备案要求有一台国内服务器…我又买了 99 一年的 1C2G 腾讯云学生机…

感觉自己往奇怪的方向走远了…

备案要求网站闭站一个月…

期间腾讯云给我打了两次电话…

一个月好久啊…

终于过了…

接下来在自己的服务器上安装 nginx,通过代理访问原来的站点。

yum install -y nginx

/etc/nginx/nginx.conf的适当位置添加如下内容:

http {
    server {
        server_name wu-kan.cn;

        listen       80 default_server;
        listen       [::]:80 default_server;
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;

        if ($scheme = http ) {
            return 301 https://$host$request_uri;
        }

        ssl_certificate "crt/1_wu-kan.cn_bundle.crt";
        ssl_certificate_key "crt/2_wu-kan.cn.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
            proxy_pass https://wu-kan.gitlab.io;
            proxy_redirect     off;
            proxy_set_header   User-Agent "Mozilla/5.0";
            proxy_set_header   Host                        $host;
            proxy_set_header   X-Real-IP                $remote_addr;
            proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;
        }
    }
}

其中ssl_certificatessl_certificate_key的内容指向 https 加密密钥的位置。

service nginx restart

成了…我突然发现,通过 nginx 反向代理修改 UA 的方式也可以解决百度爬虫 403 的问题…又白搞了…好气人啊。

在 nginx 反代之外我还尝试过哪些骚操作

  • 在自己的服务器上搭建自己的 Gitlab,然后开启 Gitlab Page…过程非常曲折,而且最后终于部署成功了却发现免费的 gitlab-ce 不支持自动镜像功能…淦
  • 直接在自己的服务器上bundle exec jekyll serve -p 80,同时后台定时一个小时执行一次git pull

这些操作都违背了我一开始的无后端服务器写博客的初衷。如果要这样的话我干嘛不用 wordpress 呐…

部署 CDN 加速

由于贫穷的我购买的服务器带宽只有 1M,因此我的博客同时访问人数就会被限制。好在腾讯云 cdn 每个月提供了 10GB 的免费流量(cdn 要求域名备案)。于是我绕开了自己的服务器,直接对 wu-kan.gitlab.io 这个域名部署 CDN,前一步 nginx 反代又白做了…

强势提醒,为了防止一觉醒来自己房子变成麻花疼的,切记一定要在设置里给带宽封顶…

总结

一套搞下来是身心俱疲,总之还是学到了一点东西不是毫无收获吧…想着专注于博文内容,结果在奇奇怪怪的地方花的精力更多了。

(完)