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