文件
a 專案

Caddyfile 教學

本教學將教您 HTTP Caddyfile 的基礎知識,讓您可以快速輕鬆地製作美觀且實用的網站組態。

目標

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

先備條件

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

建立一個名為 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: Sat Apr 27 17:14:45 UTC 2024

使用 Caddy 的範本模組,您可以對靜態檔案執行許多有用的操作,例如包含其他 HTML 檔案、建立子要求、設定回應標頭、使用資料結構,以及更多!

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

localhost

encode zstd gzip
templates
file_server browse

這是建立一個半進階、準備上線的網站的基本流程!

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

多個網站

使用我們目前的 Caddyfile,我們只能有一個網站定義!只有第一行可以是網站的地址,然後檔案中的所有其他內容都必須是該網站的指令。

但要讓它可以新增更多網站很容易!

我們的 Caddyfile 到目前為止

localhost

encode zstd gzip
templates
file_server browse

等於這個

localhost {
	encode zstd gzip
	templates
	file_server browse
}

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

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

例如

:8080 {
	respond "I am 8080"
}

:8081 {
	respond "I am 8081"
}

在花括號中包住網站區塊時,只有 地址 會出現在花括號外,而只有 指令 會出現在花括號內。

對於共用相同組態的多個網站,您可以新增更多地址,例如

:8080, :8081 {
	...
}

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

比對器

我們可能只想對某些要求套用一些指令。例如,假設我們想要同時有一個檔案伺服器和一個反向代理程式,但我們顯然無法對每個要求都執行這兩個動作!檔案伺服器會寫入靜態檔案,或反向代理程式會將要求代理到後端。

這個組態不會像我們想要的那樣運作

localhost

file_server
reverse_proxy 127.0.0.1:9005

實際上,我們可能只想對 API 要求使用反向代理程式,也就是基礎路徑為 /api/ 的要求。透過新增 比對器代幣,這很容易做到

localhost

file_server
reverse_proxy /api/* 127.0.0.1:9005

在那裡;現在反向代理程式將優先處理所有以 /api/ 開頭的要求。

我們剛剛新增的 /api/* 代幣稱為比對器代幣。您可以看出它是一個比對器代幣,因為它以正斜線 / 開頭,而且它出現在指令的正後方(但您隨時可以在 指令文件 中查看以確定)。

比對器非常強大。您可以命名比對器並使用它們,例如 @name 來比對不只是要求路徑的內容!在繼續之前,請花點時間 深入了解比對器

環境變數

Caddyfile 適配器允許在分析 Caddyfile 之前替換 環境變數

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

export SITE_ADDRESS=localhost:9055

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

{$SITE_ADDRESS}

file_server

在解析 Caddyfile 之前,它將會擴充為

localhost:9055

file_server

你可以在 Caddyfile 中的任何地方使用環境變數,用於任意數量的令牌。

註解

最後一件事你會發現很有幫助:如果你想在 Caddyfile 中備註或標記任何東西,你可以使用註解,從 # 開始

# this starts a comment

進一步閱讀