美文网首页
重回github pages

重回github pages

作者: Yuan2021 | 来源:发表于2016-04-21 22:57 被阅读198次

    之前折腾的各种vps,包括vultr、HostUS、DigitalOcean等等,由于一些不可抗力,服务器开始都还很流畅,过一段时间就几乎不可访问了,ping值高达300多ms,ssh基本连不上!据说,某墙采用了流量探测的方法,发现异常流量也会直接搞得你不可用;还有就是坑爹的电信网,对国外出口流量本身就有限制,导致基本在家不可用。

    最终一怒之下,还是把blog迁移到比较稳定可靠的github pages上来。


    Github Pages 和 Hexo

    github pages是github提供的一种空间托管服务,但是只能托管静态文件,对于写博客足以,静态文件支持html、css这些常见的网页件,markdown文件、jekyll文件,并不支持PHP这种动态脚本。虽然直接用jekyll也可以写静态博客,但是我发现jekyll对markdown的解析不是很好,相比而言hexo对markdown的解析更到位,至少我把之前在简书上写的markdown文章用hexo解析是好的,用jekyll解析的一塌糊涂。

    使用hexo做静态博客有个比较麻烦的地方是,hexo本身的博客源码是基于node.js的,直接将源码放在github上是不能解析的,必须用命令

    hexo generate

    生成public文件,public文件里面是html、css文件,然后将其部署到github的username.github.io项目的master分支下,或者其他repository的gh-pages分支下,同时在source目录下添加CNAME文件(CNAME里面记录自定义的域名),这样hexo会把CNAME文件放到网站根目录下。我自己的处理方式是,在blog项目的master分支下保存博客源码,在gh-pages分支下保存html、css等静态文件。

    hexo支持直接部署在github上,但是每次都会覆盖提交历史,因为hexo是force的方式进行push,在_config.yml添加如下配置

    deploy:
      type: git
      repo: git@github.com:yuanwhy/blog.git
      branch : gh-pages
      message : yuanwhy-blog update {{ now('YYYY-MM-DD HH:mm:ss') }})
    

    执行deploy命令

    hexo deploy


    自定义域名与CNAME原理浅析

    这里简单地解析下github pages的基本原理,以笔者的域名yuanwhy.com为例,我们在访问yuanwhy.com的时候到底发生了什么?

    GET / HTTP/1.1
    Host: yuanwhy.com
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: zh-CN,zh;q=0.8
    

    这是我在chrome浏览器里输入yuanwhy.com的时候,通过F12观察到的请求头header,注意在header里面有一个字段host,github的服务器正是通过host来判断应该向浏览器返回一个什么样的html页面。当然前提是我得把yuanwhy.com这个域名建立A记录指向github提供的服务器地址。

    github知道请求是要获取yuanwhy.com的首页,但是应该去哪个repository里面找呢?这个时候我猜测,github服务器肯定有数据库存储了yuanwhy.com和repository的对应关系,这个对应关系肯定是我在向blog项目的gh-pages分支添加CNAME文件的时候建立的,注意必须是gh-pages分支才会触发这个关系的建立,或者yuanwhy.github.io项目的master分支也同样能触发。

    但是这里有个漏洞,如果我在自己项目的gh-pages的CNAME文件写上了别人同样指向github服务器的域名,那么他的域名会不会访问到我的repository上?哈哈,有待验证!

    相关文章

      网友评论

          本文标题:重回github pages

          本文链接:https://www.haomeiwen.com/subject/ntotrttx.html