像iPhone一樣好玩的Web服務(wù)器: Caddy

據(jù)Netcraft今年5月份放出了一篇統(tǒng)計(jì)文章中,ApacheNginx和微軟的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的作者是來自美國的Matthew Holt,因?yàn)槭怯肎o語言開發(fā)的,所以Caddy天生里就帶著高并發(fā)的基因。據(jù)國內(nèi)技術(shù)人士測(cè)試,其同時(shí)并發(fā)數(shù)優(yōu)于Apache,略低于Nginx?!?b>幾乎所有的功能在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ì)列!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評(píng)論 6 342
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,733評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,036評(píng)論 4 61
  • 陌塵:“我真是自作孽不可活,惹上了這么一號(hào)人,看似文質(zhì)彬彬的,實(shí)際不是這樣的,不是的,怎么會(huì)這樣……” 正打算問候...
    瀟潼閱讀 281評(píng)論 0 0

友情鏈接更多精彩內(nèi)容