之前折騰的各種vps,包括vultr级乍、HostUS、DigitalOcean等等帚湘,由于一些不可抗力玫荣,服務(wù)器開始都還很流暢,過一段時(shí)間就幾乎不可訪問了大诸,ping值高達(dá)300多ms捅厂,ssh基本連不上!據(jù)說资柔,某墻采用了流量探測(cè)的方法焙贷,發(fā)現(xiàn)異常流量也會(huì)直接搞得你不可用;還有就是坑爹的電信網(wǎng)贿堰,對(duì)國外出口流量本身就有限制辙芍,導(dǎo)致基本在家不可用。
最終一怒之下,還是把blog遷移到比較穩(wěn)定可靠的github pages上來故硅。
Github Pages 和 Hexo
github pages是github提供的一種空間托管服務(wù),但是只能托管靜態(tài)文件吃衅,對(duì)于寫博客足以往踢,靜態(tài)文件支持html捐晶、css這些常見的網(wǎng)頁件妄辩,markdown文件惑灵、jekyll文件眼耀,并不支持PHP這種動(dòng)態(tài)腳本。雖然直接用jekyll也可以寫靜態(tài)博客哮伟,但是我發(fā)現(xiàn)jekyll對(duì)markdown的解析不是很好,相比而言hexo對(duì)markdown的解析更到位楞黄,至少我把之前在簡書上寫的markdown文章用hexo解析是好的池凄,用jekyll解析的一塌糊涂鬼廓。
使用hexo做靜態(tài)博客有個(gè)比較麻煩的地方是肿仑,hexo本身的博客源碼是基于node.js的,直接將源碼放在github上是不能解析的碎税,必須用命令
hexo generate
生成public文件尤慰,public文件里面是html、css文件雷蹂,然后將其部署到github的username.github.io項(xiàng)目的master分支下伟端,或者其他repository的gh-pages分支下,同時(shí)在source目錄下添加CNAME文件(CNAME里面記錄自定義的域名)匪煌,這樣hexo會(huì)把CNAME文件放到網(wǎng)站根目錄下责蝠。我自己的處理方式是,在blog項(xiàng)目的master分支下保存博客源碼萎庭,在gh-pages分支下保存html玛歌、css等靜態(tài)文件。
hexo支持直接部署在github上擎椰,但是每次都會(huì)覆蓋提交歷史支子,因?yàn)閔exo是force的方式進(jìn)行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') }})
執(zhí)行deploy命令
hexo deploy
自定義域名與CNAME原理淺析
這里簡單地解析下github pages的基本原理达舒,以筆者的域名yuanwhy.com為例值朋,我們?cè)谠L問yuanwhy.com的時(shí)候到底發(fā)生了什么叹侄?
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的時(shí)候,通過F12觀察到的請(qǐng)求頭header昨登,注意在header里面有一個(gè)字段host趾代,github的服務(wù)器正是通過host來判斷應(yīng)該向?yàn)g覽器返回一個(gè)什么樣的html頁面。當(dāng)然前提是我得把yuanwhy.com這個(gè)域名建立A記錄指向github提供的服務(wù)器地址丰辣。
github知道請(qǐng)求是要獲取yuanwhy.com的首頁撒强,但是應(yīng)該去哪個(gè)repository里面找呢?這個(gè)時(shí)候我猜測(cè)笙什,github服務(wù)器肯定有數(shù)據(jù)庫存儲(chǔ)了yuanwhy.com和repository的對(duì)應(yīng)關(guān)系飘哨,這個(gè)對(duì)應(yīng)關(guān)系肯定是我在向blog項(xiàng)目的gh-pages分支添加CNAME文件的時(shí)候建立的,注意必須是gh-pages分支才會(huì)觸發(fā)這個(gè)關(guān)系的建立琐凭,或者yuanwhy.github.io項(xiàng)目的master分支也同樣能觸發(fā)芽隆。
但是這里有個(gè)漏洞,如果我在自己項(xiàng)目的gh-pages的CNAME文件寫上了別人同樣指向github服務(wù)器的域名统屈,那么他的域名會(huì)不會(huì)訪問到我的repository上胚吁?哈哈,有待驗(yàn)證愁憔!