こんにちは、Tomです。今回は、Caddyを使って、さくらのクラウド上に簡単Webサーバを構築してみます。
Caddyとは
Webサーバーといえば、Apache HTTP ServerやNginxを思い浮かべる方が多いのではないでしょうか。
今回は、それらとは別のWebサーバーである「Caddy」を、さくらのクラウド上のサーバーに導入してみます。
Caddyの特徴のひとつが「Automatic HTTPS」です。
公開ドメインをCaddyfileに設定すると、条件を満たしていればTLS証明書の取得・更新やHTTPからHTTPSへのリダイレクトをCaddyが自動的に行います。
今回は、
- さくらのクラウドでAlmaLinux 10のサーバーを用意
- Caddyをインストール
- 静的HTMLを公開
caddy.tnagai-wp.clickを設定- HTTPSでアクセス
- TLS証明書が自動的に取得されることを確認
という流れで、Caddyを試してみます。
検証環境
今回の検証環境は以下の通りです。
| 項目 | 内容 |
|---|---|
| クラウド | さくらのクラウド |
| OS | AlmaLinux 10 |
| Webサーバー | Caddy |
| ドメイン | caddy.tnagai-wp.click |
| コンテンツ配置先 | /var/www/html |
AlmaLinux 10はRHEL 10との互換性を維持するディストリビューションとしてリリースされています。
HTTPS化するための事前準備
今回はCaddyのAutomatic HTTPSを利用するため、あらかじめ
caddy.tnagai-wp.click
↓
サーバのIPアドレスとなるようにDNSのAレコードを設定しておきます。
また、Caddyが公開TLS証明書を自動取得するためには、ドメインのA/AAAAレコードがサーバーを向いていることに加え、外部からTCP 80番・443番ポートへ接続できる必要があります。
さくらのクラウドの「パケットフィルタ」を使用している場合は、HTTP用のTCP/80とHTTPS用のTCP/443へのアクセスを許可しておきます。
Caddyをインストール
それではCaddyをインストールします。
まずOSを確認します。
# cat /etc/almalinux-release実際の出力例は検証時の結果を掲載します。
AlmaLinux release 10.2 (Lavender Lion)Caddy公式ドキュメントでは、CentOS/RHEL向けのRPMパッケージのインストール方法としてCOPRリポジトリを利用する方法が案内されています。
今回はこの方法でインストールします。
以下はパッケージ追加を伴う作業コマンドです。
# dnf install -y dnf-plugins-core今回は既にインストールされていました。では、CaddyのCOPRリポジトリを有効化します。
# dnf copr enable @caddy/caddy
Enabling a Copr repository. Please note that this repository is not part
of the main distribution, and quality may vary.
The Fedora Project does not exercise any power over the contents of
this repository beyond the rules outlined in the Copr FAQ at
<https://docs.pagure.org/copr.copr/user_documentation.html#what-i-can-build-in-copr>,
and packages are not held to any quality or security level.
Please do not file bug reports about these packages in Fedora
Bugzilla. In case of problems, contact the owner of this repository.
Do you really want to enable copr.fedorainfracloud.org/@caddy/caddy? [y/N]: y
Repository successfully enabled.続いてCaddyをインストールします。
# dnf install -y caddyインストールできたことを確認します。
# rpm -q caddy
caddy-2.11.4-2.el10.x86_64Caddy自身のバージョンも確認してみます。
# caddy version
v2.11.4 h1:XKxkMTgNSizEvKG6QHue6cAsFOteU2qA61w2tKkCWi0=
4. Caddyを起動して確認
systemd用のUnitファイルが作られているので、立ち上げましょう。
# systemctl enable caddy
# systemctl start caddy状態を確認します。
# systemctl status caddy以下のように、
Active: active (running)となっていれば起動しています。
ポートの待ち受けを確認
次に、Caddyが使用しているポートを確認します。
# ss -lntp | grep -E ':(80|443)\b'
LISTEN 0 4096 *:80 *:* users:(("caddy",pid=37274,fd=6))インストール直後の公式RPMのCaddyfileでは、
:80 {
root * /usr/share/caddy
file_server
}という設定になっており、まずHTTPの80番ポートで待ち受ける構成になっています。
ブラウザから
http://<サーバーのグローバルIPアドレス>へアクセスして、Caddyの初期ページを確認してみるのもよいでしょう。
5. 公開するHTMLを用意する
今回はCaddyの動作確認が目的なので、簡単な静的HTMLを公開します。
公開ディレクトリを作成します。
# mkdir -p /var/www/htmlテスト用のHTMLを作成します。
tee /var/www/html/index.html > /dev/null <<'EOF'
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Caddy Test</title>
</head>
<body>
<h1>Hello Caddy!</h1>
<p>さくらのクラウド上のCaddyから配信しています。</p>
</body>
</html>
EOFCaddy公式ドキュメントでも、静的コンテンツの配置場所として /var/www/html または /srv が案内されています。Caddyユーザーから読み取り可能な権限になっている必要があります。
6. Caddyfileを設定する
いよいよCaddyの設定を変更します。
Caddyの設定ファイルは、
/etc/caddy/Caddyfileです。
まず既存のCaddyfileをバックアップしておきます。
# cp -a /etc/caddy/Caddyfile /etc/caddy/Caddyfile.bakCaddyfileを編集します。
# vi /etc/caddy/Caddyfile今回は以下の設定にします。
caddy.tnagai-wp.click {
root * /var/www/html
file_server
}非常にシンプルです。
caddy.tnagai-wp.click へのアクセスに対して、
root * /var/www/htmlでドキュメントルートを /var/www/html に指定し、
file_serverで静的ファイルの配信を有効にしています。
注目したいのは、HTTPSに関する設定を記述していないことです。
例えば、
証明書ファイルのパス
秘密鍵ファイルのパス
TLSの設定
HTTP→HTTPSリダイレクトなどは今回記述していません。
公開ドメインをCaddyfileに指定し、DNSやポートなどの条件を満たしていれば、CaddyのAutomatic HTTPSによってHTTPSが自動的に有効になります。
Caddyfileをチェックする
設定を反映する前にCaddyfileに問題がないか確認します。
# caddy validate --config /etc/caddy/Caddyfile問題がなければ設定をリロードします。
# systemctl reload caddyCaddy公式ドキュメントでも、設定変更時にはサービスを停止・再起動するのではなく、reloadを利用する方法が案内されています。
再度ポートを確認します。
# ss -lntp | grep -E ':(80|443)\b'
LISTEN 0 4096 *:80 *:* users:(("caddy",pid=37274,fd=11))
LISTEN 0 4096 *:443 *:* users:(("caddy",pid=37274,fd=9))HTTPS用の443番ポートでも待ち受けていることを確認します。
7. HTTPSでアクセスしてみる
ブラウザから以下へアクセスします。
https://caddy.tnagai-wp.click
ssl証明書のエラーもなく、無事に表示されています。
curlでも確認
HTTPSでレスポンスを返せることを確認します。
# curl -I https://caddy.tnagai-wp.clickHTTP側も確認します。
# curl -I http://caddy.tnagai-wp.clickCaddyではAutomatic HTTPSがデフォルトで有効な為、Let's EncryptのSSL証明書が自動的に発行され、HTTPからHTTPSへのリダイレクトも自動的に設定されます。
かなりシンプルですし、SSL証明書周りを設定する必要がないのは凄いです。
8. TLS証明書を確認する
本当に証明書が取得されているのか確認してみます。
OpenSSLを使用して、実際に配信されている証明書の情報を確認します。
# echo | openssl s_client -connect caddy.tnagai-wp.click:443 -servername caddy.tnagai-wp.click 2>/dev/null | openssl x509 -noout -subject -issuer -datesここでは、
- Subject
- Issuer
- 有効期間
などを確認できます。
Caddyは公開DNS名に対して、Let's EncryptやZeroSSLなどの公開ACME CAを利用して証明書を取得できます。また、Caddyが管理している証明書は自動更新の対象になります。
そのため、従来のように別途Certbotなどの証明書管理ツールを組み合わせなくても、Caddy自身でHTTPSを管理できます。
9. Caddyのログを確認する
続いてログも確認してみます。
公式systemdサービスを使用している場合、Caddyの標準出力・標準エラー出力はjournalに記録されます。
直近100行を確認します。
# journalctl -u caddy --no-pager -n 100証明書取得時には、TLSやACMEに関係するログも確認できます。
# journalctl -u caddy --no-pager -n 100 | grep -Ei 'certificate|tls|acme' | head -100HTTPS化に失敗した場合も、まずCaddyのログを確認すると原因を追いやすそうです。
例えば、
- DNSがまだサーバーを向いていない
- 80番または443番ポートへ外部から接続できない
- 証明書の取得処理でエラーになっている
といった場合には、ログを確認して切り分けます。
ちなみに今回も検証の際、パケットフィルタにおける戻りパケットの許可設定を追加し忘れて、Let's EncryptのSSL証明書発行に失敗しました。
Caddyのデータ保存先
systemdサービスとして実行した場合、CaddyユーザーのHOMEは /var/lib/caddy となり、証明書などの状態情報はデフォルトでは、
/var/lib/caddy/.local/share/caddy配下に保存されます。
ファイルを確認する場合は、秘密鍵の内容自体は表示せず、ファイル一覧程度にとどめます。
# find /var/lib/caddy/.local/share/caddy -maxdepth 5 -type f | head -10010. まとめ
今回は、さくらのクラウド上のAlmaLinux 10にCaddyをインストールして、静的なWebサイトをHTTPSで公開してみました。
実際に設定したCaddyfileは、
caddy.tnagai-wp.click {
root * /var/www/html
file_server
}と非常にシンプルです。
Caddyを使って特に印象的なのは、HTTPSを利用するための設定が少ないことでした。
ApacheやNginxでもLet's Encryptなどを利用してHTTPS化できますが、Webサーバーとは別に証明書の取得・更新方法を設計する構成も多くあります。
一方、CaddyではAutomatic HTTPSがWebサーバー自体の機能として組み込まれており、
ドメインを設定
↓
Caddyを起動・リロード
↓
TLS証明書を自動取得
↓
HTTPSで公開
↓
証明書も自動更新という流れでHTTPSサイトを構築できます。
今回は静的HTMLを公開しただけですが、Caddyにはリバースプロキシ機能もあります。
そのため次回は、
caddy.tnagai-wp.click {
reverse_proxy localhost:8080
}のような構成で、Caddyをリバースプロキシとして利用してみるのも面白そうです。
小規模なWebサイトだけでなく、Webアプリケーションのフロントに配置するWebサーバー・リバースプロキシの選択肢としても、Caddyは検討してみる価値がありそうです。
参考資料
- Caddy Documentation - Install
Caddy公式のインストール手順。CentOS/RHEL向けのCOPRを利用したインストール方法を確認。 - Caddy Documentation - Automatic HTTPS
TLS証明書の自動取得・更新、HTTPからHTTPSへのリダイレクト、必要なDNS・ポート条件を確認。 - Caddy Documentation - Keep Caddy Running
systemdでの実行方法、ログ、証明書などのデータ保存先を確認。 - AlmaLinux OS 10.0 Stable Now Available
2025年5月27日公開。AlmaLinux 10とRHEL 10の互換性について確認。 - さくらのクラウド マニュアル - パケットフィルタ
2025年12月9日更新。さくらのクラウド上でのポート制御について確認。