Caddy 伺服器提供 basic_auth 指令,可用於保護特定目錄或檔案,要求使用者提供帳號與密碼才能存取。此機制使用 HTTP Basic Authentication,適合用於小型內部應用或基本保護需求,但應避免在未加密的 HTTP 連線上使用,建議搭配 HTTPS 確保安全性。
設定 basic_auth
在 Caddy 設定中,basic_auth 需要使用加密後的密碼,不能直接使用明文密碼。可使用 caddy hash-password 指令來產生密碼雜湊值。例如:
caddy hash-password --plaintext "your_password"
此指令會回傳一個加密過的密碼,可用於 Caddy 設定檔中。
Caddy 設定範例
1. 保護整個網站
若要為整個網站啟用帳號密碼驗證,設定如下:
example.com {
    basic_auth {
        # 使用者名稱 "Bob",密碼 "hiccup" 的加密後雜湊
        Bob $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG
    }
    respond "Welcome, {http.auth.user.id}" 200
}
當使用者存取 example.com 時,瀏覽器會彈出驗證視窗,要求輸入帳號與密碼。
2. 只保護特定路徑
若只想保護 /secret/ 目錄,讓 Bob 可以存取,而其他人可存取網站的其他部分,設定如下:
example.com {
    root * /srv
    basic_auth /secret/* {
        # 使用者名稱 "Bob",密碼 "hiccup" 的加密後雜湊
        Bob $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG
    }
    file_server
}
在此設定下,訪問 example.com/secret/ 時,會要求使用者輸入帳號密碼;但 example.com/ 或 example.com/public/ 仍可自由存取。
注意事項
- 使用 HTTPS:HTTP Basic Authentication 會在請求標頭中傳送憑證,因此務必使用 HTTPS 保護資料傳輸。
- 密碼雜湊:Caddy 不接受明文密碼,請先使用 caddy hash-password產生加密後的密碼。
- 適用版本:basic_auth在 Caddy v2.8.0 之前稱為basicauth,若使用舊版本,請注意指令名稱變更。
透過 basic_auth,可以輕鬆為 Caddy 伺服器上的特定路徑或整個網站增加帳密保護,提升基本的安全性。