文件
一個 專案

Caddyfile 教學

本教學將教您 HTTP Caddyfile 的基礎知識,以便您可以快速輕鬆地產生美觀且功能完善的網站配置。

目標

  • 🔲 第一個網站
  • 🔲 靜態檔案伺服器
  • 🔲 範本
  • 🔲 壓縮
  • 🔲 多個網站
  • 🔲 比對器
  • 🔲 環境變數
  • 🔲 註解

先決條件

  • 基本終端機/命令列技能
  • 基本文字編輯器技能
  • caddy 在您的 PATH 中

建立一個名為 Caddyfile 的新文字檔(無副檔名)。

您應該輸入的第一件事是您網站的 位址

localhost

然後按下 Enter 鍵,輸入您想要執行的操作。對於本教學,讓您的 Caddyfile 看起來像這樣

localhost

respond "Hello, world!"

儲存並執行 Caddy(由於這是訓練教學,我們將使用 --watch 旗標,以便自動套用對 Caddyfile 的變更)

caddy run --watch

第一次時,系統會要求您輸入密碼。這是為了讓 Caddy 可以透過 HTTPS 提供您的網站。

在您的瀏覽器中開啟 localhost,並查看您的網頁伺服器運作中,並具備 HTTPS!

這不是特別令人興奮,所以讓我們將靜態回應變更為啟用目錄清單的 檔案伺服器

localhost

file_server browse

儲存您的 Caddyfile,然後重新整理您的瀏覽器分頁。您應該會看到檔案清單,或者如果目前目錄中有索引檔案,則會看到 HTML 頁面。

新增功能

讓我們對我們的檔案伺服器做一些有趣的事情:提供範本頁面。建立一個新檔案並將以下內容貼到其中

<!DOCTYPE html>
<html>
	<head>
		<title>Caddy tutorial</title>
	</head>
	<body>
		Page loaded at: {{now | date "Mon Jan 2 15:04:05 MST 2006"}}
	</body>
</html>

將其儲存為目前目錄中的 caddy.html,並在您的瀏覽器中載入:https://127.0.0.1/caddy.html

輸出為

Page loaded at: {{now | date "Mon Jan 2 15:04:05 MST 2006"}}

等一下。我們應該看到今天的日期。為什麼沒有運作?那是因為伺服器尚未配置為評估範本!很容易修正,只需在 Caddyfile 中新增一行,使其看起來像這樣

localhost

templates
file_server browse

儲存,然後重新載入瀏覽器分頁。您應該會看到

Page loaded at: Mon Mar 10 17:17:45 UTC 2025

透過 Caddy 的 範本模組,您可以使用靜態檔案執行許多有用的操作,例如包含其他 HTML 檔案、發出子請求、設定回應標頭、處理資料結構等等!

使用快速且現代的壓縮演算法壓縮回應是一種良好的做法。讓我們使用 encode 指令啟用 Gzip 和 Zstandard 支援

localhost

encode
templates
file_server browse

這是啟動並執行半進階、可用於生產環境的網站的基本流程!

當您準備好開啟 自動 HTTPS 時,只需將您網站的位址(在本教學中為 localhost)替換為您的網域名稱。請參閱我們的 HTTPS 快速入門指南以取得更多資訊。

多個網站

使用我們目前的 Caddyfile,我們只能有一個網站定義!只有第一行可以是網站的位址,然後檔案的其餘部分都必須是該網站的指令。

但是很容易使其能夠新增更多網站!

我們目前的 Caddyfile 到目前為止

localhost

encode
templates
file_server browse

等同於這個

localhost {
	encode
	templates
	file_server browse
}

除了第二個允許我們新增更多網站。

透過將我們的網站區塊包裝在花括號 { } 中,我們能夠在同一個 Caddyfile 中定義多個不同的網站。

例如

:8080 {
	respond "I am 8080"
}

:8081 {
	respond "I am 8081"
}

當將網站區塊包裝在花括號中時,只有 位址 會出現在花括號之外,而只有 指令 會出現在花括號之內。

對於共用相同配置的多個網站,您可以新增更多位址,例如

:8080, :8081 {
	...
}

然後您可以定義任意多個不同的網站,只要每個位址都是唯一的。

比對器

我們可能希望僅將某些指令應用於特定請求。例如,假設我們想要同時擁有檔案伺服器和反向代理,但我們顯然無法在每個請求上都執行這兩者!檔案伺服器將使用靜態檔案寫入回應,或者反向代理將請求傳遞到後端並寫回其回應。

此配置將無法如我們所願運作(由於 指令順序reverse_proxy 將優先)

localhost

file_server
reverse_proxy 127.0.0.1:9005

實際上,我們可能只想將反向代理用於 API 請求,即基本路徑為 /api/ 的請求。這很容易透過新增 比對器權杖 來完成

localhost

reverse_proxy /api/* 127.0.0.1:9005
file_server

這樣;現在反向代理將優先處理所有以 /api/ 開頭的請求。

我們剛剛新增的 /api/* 部分稱為比對器權杖。您可以判斷它是比對器權杖,因為它以正斜線 / 開頭,並且出現在指令之後(但您可以隨時在 指令的文件中查找以確認)。

比對器非常強大。您可以宣告具名比對器並像 @name 一樣使用它們,以比對除了請求路徑之外的更多內容!在繼續之前,花一點時間了解更多關於比對器的資訊

環境變數

Caddyfile 轉接器允許在剖析 環境變數 之前替換環境變數。

首先,設定一個環境變數(在執行 Caddy 的同一個 shell 中)

export SITE_ADDRESS=localhost:9055

然後您可以在 Caddyfile 中像這樣使用它

{$SITE_ADDRESS}

file_server

在剖析 Caddyfile 之前,它將展開為

localhost:9055

file_server

您可以在 Caddyfile 中的任何位置使用環境變數,用於任意數量的權杖。

註解

最後一件您會發現非常有用的事情:如果您想在 Caddyfile 中註解或註記任何內容,您可以使用註解,以 # 開頭

# this starts a comment

延伸閱讀