CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
一年前我转投 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_certificate
和ssl_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 反代又白做了…
强势提醒,为了防止一觉醒来自己房子变成麻花疼的,切记一定要在设置里给带宽封顶…
总结
一套搞下来是身心俱疲,总之还是学到了一点东西不是毫无收获吧…想着专注于博文内容,结果在奇奇怪怪的地方花的精力更多了。
(完)