3.6 萬顆星!開源 Web 伺服器後起之秀,自帶免費 HTTPS 開箱即用

削微寒發表於2022-02-16

眾所周知,Web 伺服器是 Web 開發中不可或缺的基礎服務,在開發中經常會用到。耳熟能詳的開源 Web 伺服器有久負盛名的 Apache、效能強勁的 Nginx。而我們今天要介紹的開源專案是採用 Go 編寫的 Web 服務端“後起之秀”:Caddy 它擁有下載無需安裝就能用、零配置實現 HTTPS 等特點,從而在強者如雲的 Web 伺服器中佔據了一席之地。

在這個 HTTPS 必選的時代,Caddy 憑藉無需額外配置自動 HTTPS,分分鐘完成 HTTPS 站點搭建,使它成為了中小型 Web 服務的首選伺服器。Caddy 深受開源愛好者們的喜愛,2014 年開源至今共收穫了 3.6 萬顆星。

專案地址:https://github.com/caddyserver/caddy

一、為什麼使用 Caddy ?

Caddy 是一個強大的、可擴充套件的平臺,可以為您的站點、服務和應用程式提供服務。

使用 Caddy 可以在 Linux、Mac、Windows 上快速部署 http(s) 站點或反向代理服務。支援:

  • HTTP/1.1 和 HTTP/2
  • 同時接受 HTTPS 自動簽發和手動管理
  • 虛擬主機 (多個站點工作在單個埠上)
  • 原生 IPv4 和 IPv6 支援
  • 靜態檔案分發
  • 平滑重啟/過載
  • 反向代理 (HTTP 或 WebSocket)
  • 負載均衡和健康性檢查
  • Markdown 渲染
  • 檔案瀏覽服務
  • 等等

與傳統的 Nginx 或者 Apache 相比,Caddy 整體只有一個可執行檔案,安裝便捷不易出現奇怪的依賴問題,配置檔案結構清晰語法簡單易於上手,依託於模組化架構可以使用 Go 語言快速開發擴充套件模組

下面讓我們上手把玩一番吧。

二、安裝

系統環境:Ubuntu 20.04 LTS

Caddy 可以作為一個系統服務安裝,命令:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

注意:這種方式安裝完成後會啟動服務,開機自動啟動。

還可以下載一個可執行檔案使用。

  1. 下載地址:https://caddyserver.com/download
  2. 在網頁上方選擇自己的作業系統後,點選右側藍色的 Download 按鈕即可
  3. 下載好的檔案不能夠直接執行,需要為其新增許可權
    $ mv caddy_linux_amd64 caddy # 將下載後的檔案重新命名方便後面指令輸入,根據系統不同檔名不一樣
    $ sudo chmod a+x caddy # 為 Caddy 新增可執行許可權
    $ mv caddy /bin/caddy # 將 Caddy 複製到 bin 目錄這樣可以在命令列隨時使用
    

命令列執行 caddy version 命令,出現版本資訊:

v2.4.6 h1:HGkGICFGvyrodcqOOclHKfvJC0qTU7vny/7FhYp9hNw=

即為安裝成功!

三、從零完成 HTTPS 站點

下面將演示如何通過 Caddy 完成 HTTPS 站點。只需要 4 步:

Tips 例子用的域名為:caddy.hellogithub.com 修改為你的域名即可。

第一步:安裝,採用上面介紹的命令安裝

第二步:設定域名解析地址,在購買域名的網站設定。如下圖:

設定完生效需要幾分鐘,可通過下面的命令檢查是否生效:

curl "https://cloudflare-dns.com/dns-query?name=caddy.hellogithub.com&type=A" -H "accept: application/dns-json"

域名設定生效,返回如下:

{"Status":0,"TC":false,"RD":true,"RA":true,"AD":false,"CD":false,"Question":[{"name":"caddy.hellogithub.com","type":1}],"Answer":[{"name":"caddy.hellogithub.com","type":1,"TTL":592,"data":"107.150.122.176"}]}

第三步:建立配置檔案 Caddyfile,無需額外的開啟 HTTPS 的設定:

caddy.hellogithub.com

respond "Hello HTTPS!"
  1. 域名
  2. 訪問返回的內容

第四步:啟動,在同一目錄下執行命令:sudo caddy run

Caddy 預設使用執行命令目錄下的 Caddyfile 檔案內的配置。

最後,訪問 caddy.hellogithub.com 檢驗效果吧!

四、上手教程

這裡將從 Caddy 常用命令開始,再到配置講解,最後會通過一個實際案例來展示如何用 Caddy 配置網站和上線。

4.1 常用命令

4.2 配置檔案

Caddy 的原生配置檔案使用的是 JSON 格式。但是為了使用者編寫方便它提供了 Caddyfile 作為介面讓使用者可以快速配置站點資訊,執行時 Caddy 會自動將 Caddyfile 的配置資訊轉為 JSON 配置檔案。

Caddyfile 所能提供功能不如 JSON 配置檔案強大,但是對於不需要複雜配置的使用者而言完全夠用了。

Caddyfile 的配置指令格式如下:

directive [<matcher>] <args...> { # matcher 代表匹配器,如果提供則該指令將只對 matcher 描述的資源進行響應
	subdirective [<args...>]	# 子指令
}

Caddyfile 的檔案結構如圖所示:

4.3 演示

下面將演示如何用 Caddy 搭建站點,加深理解配置格式和命令使用。

目錄結構:

.
├── Caddyfile
├── index.html
└── public
    └── HG.html

兩個頁面檔案 index.htmlHG.html 的內容如下:

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
</head>
<body>
    你好,世界!
</body>
</html>
<!-- HG.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HelloGitHub</title>
</head>
<body>
    HelloGitHub
</body>
</html>

Caddyfile 配置內容如下:

# 如果本機沒有 wordpress 則註釋這一塊兒的站點配置
#:80 { # 部署一個 wordpress 站點
#	root * /var/www/wordpress
#	php_fastcgi unix//run/php/php-version-fpm.sock # 配置一個 fastcig 服務
#	file_server	# 配置一個檔案服務
#}

http://localhost:3000 {
	basicauth /public/* {
		# 匹配訪問 localhost:3000/public/* 的請求,為其加上登陸保護
		HG JDJhJDE0JGEySk9janFMdHlBY2Y0aVdQZklQak9HcmwzNDZhNFg0N3V5Ny9EZkZMZHB1Nkt4ZE5BNGJt
		# 使用者名稱 HG 密碼 HelloGitHub,密碼使用 caddy hash-passowrd 指令生成
	}

	root * ./ # 設定當前站點根目錄為當前資料夾,* 表示匹配所有的 request
	templates
	file_server {
		# 配置當前站點為靜態檔案伺服器,可用於部落格系統的搭建
		hide .git # 隱藏所有的 .git 檔案
	}
}

:4000 {
	reverse_proxy /public/* http://localhost:3000 # 配置反向代理
	# 只會匹配 locahost:4000/public 的請求,轉發到 localhost:3000/public/
}

在當前目錄輸入:

$ caddy run # 啟動 Caddy

最後,效果如下:

  1. 訪問:http://localhost:3000 可以看到頁面展示 “你好,世界!”

  2. 訪問:http://localhost:3000/public/HG.html 提示輸入使用者名稱和密碼,驗證正確後才能看到頁面。

  3. 訪問:http://localhost:4000 則會自動跳轉到埠 3000 的頁面

4.4 提供介面管理方式

Caddy 除了簡單易懂的配置檔案方式,還提供了管理配置的介面。通過這些介面可以輕鬆實現 Web 伺服器管理自動化、整合釋出等高階功能。

提供的介面和功能:

由於篇幅問題這裡就不再進行演示了,如果您想深入瞭解可以閱讀 Caddy 的官方文件

五、總結

看到這裡你應該對 Caddy 有了一些瞭解,有沒有一種相見恨晚的感覺?

雖然它的效能比不了 Nginx,但如果論上手的難易度 Caddy 甩 Nginx 幾條街!主要是預設開啟 HTTPS 功能太香了,你什麼都不用管就可以免費、快速、輕鬆開啟網站 HTTPS。

最後,如果你想搭建個靜態部落格或小站,快去試試 Caddy 吧!香不香只有“吃”過才知道~

這裡是 HelloGitHub 推出的《講解開源專案》系列,為您叩開開源專案的大門。

相關文章