據(jù)Netcraft今年5月份放出了一篇統(tǒng)計(jì)文章中宁仔,Apache矛辕、Nginx和微軟的IIS分別以45.61%粥航、20.22%和7.83%市場(chǎng)占有率依然排在“活躍網(wǎng)站所使用Web服務(wù)器市場(chǎng)份額”的前三甲粟焊。
但是在走勢(shì)圖中冤狡,我們儼然也感覺到其他Web服務(wù)器正在悄悄集結(jié)孙蒙,通過自己不斷的創(chuàng)新和優(yōu)化來威脅著霸主們的地位。這其中悲雳,一個(gè)已經(jīng)剛滿2歲的家族小成員非常起眼挎峦,他就是有著“云計(jì)算時(shí)代的C語言”之稱的Go語言所編寫的Caddy。
Caddy是什么合瓢?在Caddy的官網(wǎng)上給出一個(gè)最簡(jiǎn)單的介紹:“Caddy是一個(gè)能自動(dòng)創(chuàng)建HTTPS功能的HTTP/2網(wǎng)站服務(wù)器”坦胶。簡(jiǎn)單的一句話,突出了兩大賣點(diǎn)晴楔,“自動(dòng)創(chuàng)建HTTPS”和“HTTP/2”顿苇。申請(qǐng)過HTTPS數(shù)字證書的人應(yīng)該都知道,要部署一個(gè)HTTPS站點(diǎn)税弃,需要走多少流程和提交多少資料纪岁,而且數(shù)字證書的年費(fèi)價(jià)格不菲(屌絲想法),但是我要告訴你则果,這些幔翰,對(duì)于Caddy來說,都是自動(dòng)操作的西壮,而且重點(diǎn)是遗增,上面這句話里沒有體現(xiàn)出來,就是數(shù)字證書是免費(fèi)的款青!免費(fèi)的做修!免費(fèi)的!重要的事情說三遍抡草,具體怎么個(gè)實(shí)現(xiàn)饰及,在下面介紹特性時(shí)會(huì)詳細(xì)講解給大家。
Caddy的作者是來自美國(guó)的Matthew Holt渠牲,因?yàn)槭怯肎o語言開發(fā)的旋炒,所以Caddy天生里就帶著高并發(fā)的基因。據(jù)國(guó)內(nèi)技術(shù)人士測(cè)試签杈,其同時(shí)并發(fā)數(shù)優(yōu)于Apache瘫镇,略低于Nginx〈鹄眩“幾乎所有的功能在Caddy里的都是插件”铣除,這是Matthew Holt對(duì)他的孩子的另一種詮釋,“HTTP服務(wù)器是插件鹦付,高級(jí)的TLS特性也是插件尚粘,每一行命令實(shí)現(xiàn)的功能都是一個(gè)插件”。自始至終敲长,Caddy就是一個(gè)內(nèi)心強(qiáng)大郎嫁,勇于挑戰(zhàn)新事物的探險(xiǎn)家秉继,這完全得益于他的作者對(duì)互聯(lián)網(wǎng)產(chǎn)品的深刻認(rèn)知與理解。
一泽铛、運(yùn)行
1.1 默認(rèn)運(yùn)行
廢話不多說尚辑,我們先看看Caddy是怎樣運(yùn)行的。命令行里輸入:
caddy
就是這么簡(jiǎn)單盔腔,在沒有任何配置信息的情況下杠茬,Caddy會(huì)為你默認(rèn)打開2015端口,呈現(xiàn)出一個(gè)404不存在的頁面弛随。
1.2 Caddyfile配置運(yùn)行
如果需要配置更多信息瓢喉,而也只需要一個(gè)Caddyfile配置文件。配置文件格式如下:
stozen.net ? # Your site's address
ext .html ? # Clean URLs
errors error.log { ? ? ? # Error log
404 error-404.html ? # Custom error page
}
# PHP backend
fastcgi /blog localhost:9000 php
# API load balancer
proxy /api localhost:5001 localhost:5002
配置說明:
- stozen.net:網(wǎng)站綁定的域名
- ext:文件擴(kuò)展名隱藏功能舀透。此處如果訪問/user地址栓票,實(shí)質(zhì)訪問的是/user.html
- errors:記錄錯(cuò)誤日志的地址,并配置不同錯(cuò)誤狀態(tài)返回到客戶端的錯(cuò)誤頁面
- fastcgi:支持fastcgi代理方式訪問PHP站點(diǎn)
- proxy:支持反向代理和負(fù)載均衡
在Caddyfile所在路徑里執(zhí)行caddy命令盐杂,站點(diǎn)便輕松運(yùn)行逗载。是不是比Apache和Nginx配置方便多了?
1.3 更快速的運(yùn)行
在我們測(cè)試階段链烈,可以直接使用命令行參數(shù)的方式運(yùn)行,無需`Caddyfile`挚躯,直接綁定域名强衡。
caddy -host stozen.net
夠簡(jiǎn)單吧?如果你覺得還不夠码荔,我再舉些Caddy的特性功能漩勤。
二、特性
2.1 通用功能
Caddy通過Caddyfile來配置你的站點(diǎn)缩搅,簡(jiǎn)單直觀越败,剛才我們已經(jīng)見識(shí)到了。默認(rèn)情況下硼瓣,Caddy支持純靜態(tài)站點(diǎn)究飞,當(dāng)然,你如果使用了它自帶的模板插件堂鲤,反向代理功能或FastCgi等其他插件亿傅,還可是運(yùn)行動(dòng)態(tài)網(wǎng)站。Caddy有自己的命令行(Command Cli)瘟栖,可以快速配置站點(diǎn)運(yùn)行葵擎。Caddy支持多核處理,Go語言里的goroutine技術(shù)讓Caddy能處理更多的并發(fā)請(qǐng)求半哟。在Caddy啟動(dòng)和關(guān)閉的時(shí)候酬滤,你還可以設(shè)置相應(yīng)的系統(tǒng)命令去運(yùn)行签餐,這對(duì)于系統(tǒng)運(yùn)維工程師來說絕對(duì)是非常友好的。Caddy的日志功能也相當(dāng)強(qiáng)大盯串,可以自定義日志格式贱田,可以將日志輸出到文件、stdout/stderr里嘴脾,或者本地和遠(yuǎn)程的系統(tǒng)日志里男摧。更方便的是,當(dāng)Caddy的日志文件非常大時(shí)译打,Caddy會(huì)自動(dòng)分割日志文件并移動(dòng)它耗拓,這對(duì)于合理分配磁盤資源非常有用。最特別的就是Caddy完全依賴于插件奏司,所有的服務(wù)器類型乔询、指令、DNS providers都是插件韵洋,插件可以通過Go語言方便實(shí)現(xiàn)竿刁。
2.2 部署特性
Caddy就是一個(gè)單獨(dú)二進(jìn)制文件,沒有任何依賴搪缨,甚至連libc都不需要食拜。天生的跨平臺(tái)支持,支持各大Linux副编、windows發(fā)行版本负甸,甚至連Android也能穩(wěn)定運(yùn)行。當(dāng)然,你也可以在Docker鏡像里安裝Caddy,讓站點(diǎn)開發(fā)更DevOps化恃泪。
2.3 安全特性
支持TLS傳輸協(xié)議,考慮客戶端覽器兼容性的情況下蚕捉,讓用戶的信息傳輸更安全。采用了TLS的擴(kuò)展技術(shù)SNI柴淘,解決了一個(gè)服務(wù)器使用多個(gè)域名和證書的問題迫淹。對(duì)于網(wǎng)絡(luò)切換后的用戶Session認(rèn)證更加智能,使用了TLS session ticket的方式悠就,當(dāng)用戶網(wǎng)絡(luò)或服務(wù)器后臺(tái)地址變化的情況下千绪,連接請(qǐng)求依然有效。
Caddy能夠自動(dòng)獲取Let's Encrypt的證書梗脾,此證書是免費(fèi)獲取的荸型,但是有效期只有一個(gè)月。Caddy能自動(dòng)對(duì)證書進(jìn)行續(xù)訂,達(dá)到了證書永久有效的效果瑞妇。官方自豪的說稿静,Caddy是第一個(gè)實(shí)現(xiàn)此技術(shù)的Web服務(wù)器。
2.4 HTTP服務(wù)器特性
支持網(wǎng)站文件目錄瀏覽功能辕狰,支持Gzip文件壓縮功能改备,支持網(wǎng)站響應(yīng)超時(shí)功能,支持單服務(wù)器下多虛擬站點(diǎn)功能蔓倍。對(duì)Markdown靜態(tài)文件天然支持悬钳,能將Markdown頁面自動(dòng)轉(zhuǎn)換成HTML頁面返回給瀏覽器。后端支持模板技術(shù)偶翅,動(dòng)態(tài)生成網(wǎng)站內(nèi)容默勾。Caddy支持HTTP/2服務(wù)端推送技術(shù),支持HTTP網(wǎng)站基礎(chǔ)認(rèn)證功能聚谁,重定向功能母剥,修改Header頭部信息功能。像Nginx一樣形导,Caddy也支持反向代理和負(fù)載均衡技術(shù)环疼,對(duì)Websocket的代理技術(shù),也一樣支持很好朵耕。其他的炫隶,包含隱藏路由擴(kuò)展名,路徑重寫憔披,自定義MIME類型等等限,都是非常好用的一些特性。
三芬膝、iPhone vs Caddy
像喬布斯創(chuàng)造的iPhone一樣,Caddy屬于外表設(shè)計(jì)時(shí)尚簡(jiǎn)單形娇,用戶操作簡(jiǎn)單锰霜,但是內(nèi)部功能十分強(qiáng)大的產(chǎn)品。插件功能類似iPhone里的一個(gè)個(gè)應(yīng)用桐早,能給用戶帶來不同的體驗(yàn)和便捷癣缅。一句話,簡(jiǎn)約而不簡(jiǎn)單哄酝,值得用戶研究并應(yīng)用在自己的站點(diǎn)中友存。
說到最后,文章中只是簡(jiǎn)單的闡述了Caddy的一些特性功能陶衅,如果你想更多的了解它并應(yīng)用在站點(diǎn)中屡立,可以研究下Caddy的官網(wǎng)源碼(https://github.com/caddyserver/website),官網(wǎng)使用了Caddy+Hugo等技術(shù)搭建搀军,歡迎你也加入使用Caddy的隊(duì)列膨俐!