軽量でHTTPSの自動設定が強力なWebサーバー「Caddy」において、ファイルサーバー機能にBasic認証を付加する手順と、ドメイン追加時にサービス再起動が必要かどうかについてのまとめです。
Basic認証の設定手順
Caddyで静的ファイルを配信する file_server ディレクティブに対してBasic認証を設定する場合、平文のパスワードをそのままCaddyfileに記述することはできません。事前にパスワードのハッシュ値を生成し、それを設定ファイルに組み込む必要があります。
まず、サーバーのターミナル上で caddy hash-password コマンドを実行します。対話形式でパスワードの入力を求められるため、使用したいパスワードを入力すると、bcryptアルゴリズムによって暗号化されたハッシュ文字列が出力されます。
caddy hash-password
# 入力プロンプトにパスワードを入力すると、ハッシュ値が出力されます
# 出力例: $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR78lmQ827KnFsEKハッシュ文字列が得られたら、Caddyfileのサイト定義内に basicauth ディレクティブを追記します。サイト全体を保護する場合は以下のようにルートに配置します。
example.com {
root * /var/www/html
# Basic認証の設定
basicauth {
# ユーザー名 ハッシュ化されたパスワード
alice $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR78lmQ827KnFsEK
}
file_server
}
特定のディレクトリ(例: /admin/ 以下)のみを認証の対象としたい場合は、ディレクティブの直後にパスの指定をマッチャーとして付与することで適用範囲を限定できます。
example.com {
root * /var/www/html
# /admin 以下のパスのみ認証を要求
basicauth /admin/* {
bob $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR78lmQ827KnFsEK
}
file_server
}ドメイン追加時の証明書発行とreloadの挙動
Caddyfileに新しいドメインを追加した際、Webサーバーのプロセスを restart させる必要はありません。Caddyは reloadコマンドのみで証明書の発行まで完結 します。サービスを停止して再起動をかける必要はありません。
設定変更後は、サーバー上で caddy reload または systemctl reload caddy を実行します。Caddyはゼロダウンタイムで新しい設定を読み込み、構成に追加された新しいドメインを検知すると、即座にバックグラウンドでACME(Let's EncryptやZeroSSLなど)を通じたSSL/TLS証明書の自動取得と適用を開始します。
ただし、正常に証明書が発行されるためには、前提条件として以下の2点が整っている必要があります。
- 追加したドメインのDNSレコード(A/AAAA)が正しくサーバーのIPアドレスを向いていること
- HTTP-01チャレンジなどの検証を通すため、外部から80番および443番ポートへの通信が疎通可能な状態であること
これらが満たされていれば、リロードを実行するだけで数秒から十数秒のうちにHTTPS通信が確立されます。