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

據(jù)Netcraft今年5月份放出了一篇統(tǒng)計文章中,Apache、Nginx和微軟的IIS分別以45.61%20.22%7.83%市場占有率依然排在“活躍網(wǎng)站所使用Web服務(wù)器市場份額”的前三甲。

但是在走勢圖中,我們儼然也感覺到其他Web服務(wù)器正在悄悄集結(jié),通過自己不斷的創(chuàng)新和優(yōu)化來威脅著霸主們的地位。這其中,一個已經(jīng)剛滿2歲的家族小成員非常起眼,他就是有著“云計算時代的C語言”之稱的Go語言所編寫的Caddy。

Caddy是什么?在Caddy的官網(wǎng)上給出一個最簡單的介紹:“Caddy是一個能自動創(chuàng)建HTTPS功能的HTTP/2網(wǎng)站服務(wù)器”。簡單的一句話,突出了兩大賣點,“自動創(chuàng)建HTTPS”和“HTTP/2”。申請過HTTPS數(shù)字證書的人應(yīng)該都知道,要部署一個HTTPS站點,需要走多少流程和提交多少資料,而且數(shù)字證書的年費價格不菲(屌絲想法),但是我要告訴你,這些,對于Caddy來說,都是自動操作的,而且重點是,上面這句話里沒有體現(xiàn)出來,就是數(shù)字證書是免費的!免費的!免費的!重要的事情說三遍,具體怎么個實現(xiàn),在下面介紹特性時會詳細講解給大家。

Caddy的作者是來自美國的Matthew Holt,因為是用Go語言開發(fā)的,所以Caddy天生里就帶著高并發(fā)的基因。據(jù)國內(nèi)技術(shù)人士測試,其同時并發(fā)數(shù)優(yōu)于Apache,略低于Nginx?!?b>幾乎所有的功能在Caddy里的都是插件”,這是Matthew Holt對他的孩子的另一種詮釋,“HTTP服務(wù)器是插件,高級的TLS特性也是插件,每一行命令實現(xiàn)的功能都是一個插件”。自始至終,Caddy就是一個內(nèi)心強大,勇于挑戰(zhàn)新事物的探險家,這完全得益于他的作者對互聯(lián)網(wǎng)產(chǎn)品的深刻認(rèn)知與理解。

一、運行

1.1 默認(rèn)運行

廢話不多說,我們先看看Caddy是怎樣運行的。命令行里輸入:

caddy

就是這么簡單,在沒有任何配置信息的情況下,Caddy會為你默認(rèn)打開2015端口,呈現(xiàn)出一個404不存在的頁面。

1.2 Caddyfile配置運行

如果需要配置更多信息,而也只需要一個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:文件擴展名隱藏功能。此處如果訪問/user地址,實質(zhì)訪問的是/user.html

- errors:記錄錯誤日志的地址,并配置不同錯誤狀態(tài)返回到客戶端的錯誤頁面

- fastcgi:支持fastcgi代理方式訪問PHP站點

- proxy:支持反向代理和負載均衡

Caddyfile所在路徑里執(zhí)行caddy命令,站點便輕松運行。是不是比Apache和Nginx配置方便多了?

1.3 更快速的運行

在我們測試階段,可以直接使用命令行參數(shù)的方式運行,無需`Caddyfile`,直接綁定域名。

caddy -host stozen.net

夠簡單吧?如果你覺得還不夠,我再舉些Caddy的特性功能。

二、特性

2.1 通用功能

Caddy通過Caddyfile來配置你的站點,簡單直觀,剛才我們已經(jīng)見識到了。默認(rèn)情況下,Caddy支持純靜態(tài)站點,當(dāng)然,你如果使用了它自帶的模板插件,反向代理功能或FastCgi等其他插件,還可是運行動態(tài)網(wǎng)站。Caddy有自己的命令行(Command Cli),可以快速配置站點運行。Caddy支持多核處理,Go語言里的goroutine技術(shù)讓Caddy能處理更多的并發(fā)請求。在Caddy啟動和關(guān)閉的時候,你還可以設(shè)置相應(yīng)的系統(tǒng)命令去運行,這對于系統(tǒng)運維工程師來說絕對是非常友好的。Caddy的日志功能也相當(dāng)強大,可以自定義日志格式,可以將日志輸出到文件、stdout/stderr里,或者本地和遠程的系統(tǒng)日志里。更方便的是,當(dāng)Caddy的日志文件非常大時,Caddy會自動分割日志文件并移動它,這對于合理分配磁盤資源非常有用。最特別的就是Caddy完全依賴于插件,所有的服務(wù)器類型、指令、DNS providers都是插件,插件可以通過Go語言方便實現(xiàn)

2.2 部署特性

Caddy就是一個單獨二進制文件,沒有任何依賴,甚至連libc都不需要。天生的跨平臺支持,支持各大Linux、windows發(fā)行版本,甚至連Android也能穩(wěn)定運行。當(dāng)然,你也可以在Docker鏡像里安裝Caddy,讓站點開發(fā)更DevOps化。

2.3 安全特性

支持TLS傳輸協(xié)議,考慮客戶端覽器兼容性的情況下,讓用戶的信息傳輸更安全。采用了TLS的擴展技術(shù)SNI,解決了一個服務(wù)器使用多個域名和證書的問題。對于網(wǎng)絡(luò)切換后的用戶Session認(rèn)證更加智能,使用了TLS session ticket的方式,當(dāng)用戶網(wǎng)絡(luò)或服務(wù)器后臺地址變化的情況下,連接請求依然有效。

Caddy能夠自動獲取Let's Encrypt的證書,此證書是免費獲取的,但是有效期只有一個月。Caddy能自動對證書進行續(xù)訂,達到了證書永久有效的效果。官方自豪的說,Caddy是第一個實現(xiàn)此技術(shù)的Web服務(wù)器。

2.4 HTTP服務(wù)器特性

支持網(wǎng)站文件目錄瀏覽功能,支持Gzip文件壓縮功能,支持網(wǎng)站響應(yīng)超時功能,支持單服務(wù)器下多虛擬站點功能。對Markdown靜態(tài)文件天然支持,能將Markdown頁面自動轉(zhuǎn)換成HTML頁面返回給瀏覽器。后端支持模板技術(shù),動態(tài)生成網(wǎng)站內(nèi)容。Caddy支持HTTP/2服務(wù)端推送技術(shù),支持HTTP網(wǎng)站基礎(chǔ)認(rèn)證功能,重定向功能,修改Header頭部信息功能。像Nginx一樣,Caddy也支持反向代理和負載均衡技術(shù),對Websocket的代理技術(shù),也一樣支持很好。其他的,包含隱藏路由擴展名,路徑重寫,自定義MIME類型等,都是非常好用的一些特性。

三、iPhone vs Caddy

像喬布斯創(chuàng)造的iPhone一樣,Caddy屬于外表設(shè)計時尚簡單,用戶操作簡單,但是內(nèi)部功能十分強大的產(chǎn)品。插件功能類似iPhone里的一個個應(yīng)用,能給用戶帶來不同的體驗和便捷。一句話,簡約而不簡單,值得用戶研究并應(yīng)用在自己的站點中。

說到最后,文章中只是簡單的闡述了Caddy的一些特性功能,如果你想更多的了解它并應(yīng)用在站點中,可以研究下Caddy的官網(wǎng)源碼(https://github.com/caddyserver/website),官網(wǎng)使用了Caddy+Hugo等技術(shù)搭建,歡迎你也加入使用Caddy的隊列!

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

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

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

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