「HTTPS化の設定が面倒」── その悩みを最も鮮やかに解決するのがCaddyだ.数行のCaddyfileを書くだけで,証明書の取得から更新まで完全に自動,HTTPSのサイトが立ち上がる.

Caddyの思想は「設定はシンプルに,HTTPSはデフォルトで」だ.Nginxのような細かい制御の代わりに,圧倒的な手軽さと安全なデフォルトを提供する.個人開発の小〜中規模サイトに最適な選択肢だ.

この記事は,VPSで手軽にHTTPSサイトを立てたい個人開発者,設定の複雑さを避けたいエンジニアに向けている.Caddyfileの記法から,リバースプロキシ・静的配信・複数サイト,他サーバーとの使い分けまでを解説する.

読み終えたとき,あなたは数行の設定でHTTPSサイトを立て,証明書を一切意識せず運用できるようになっている.

なぜCaddyはこんなに簡単なのか

Caddyの最大の特徴は「自動HTTPS」がデフォルトであることだ.ドメインを書くだけで,Let’s Encryptから証明書を自動取得し,自動更新する.HTTPS化のために特別な設定は一切要らない.

設定ファイル(Caddyfile)も極めてシンプルだ.Nginxの設定が数十行になる構成が,Caddyなら数行で済むことも多い.学習コストが低く,読みやすい.

この手軽さの代償は,Nginxほど細かい制御ができないことだが,個人開発の多くのケースではCaddyのデフォルトで十分以上だ.「シンプルさ」そのものが価値になる.

「とにかく速く・安全にHTTPSサイトを立てたい」なら,Caddyは現時点で最も手軽な選択肢の一つだ.

Caddyfile ― 数行で完結する設定

Caddyの設定ファイルCaddyfileは驚くほど短い.ドメインと配信内容を書くだけで,HTTPSが自動で有効になる.

最小のCaddyfile(静的サイト)

example.com {
    root * /var/www/site
    file_server
}
# これだけで example.com がHTTPSで配信される
# 証明書の取得・更新は完全に自動

これだけだ.example.comと書いた瞬間,CaddyはLet’s Encryptから証明書を取得し,HTTPSで配信を始める.Certbotも,証明書の更新設定も,HTTP→HTTPSリダイレクトの記述も要らない── すべて自動で行われる.

リバースプロキシ ― 1行でアプリに振り分ける

Caddyをリバースプロキシとして使うのも極めて簡単だ.reverse_proxy1行でアプリに振り分けられる.

リバースプロキシのCaddyfile

app.example.com {
    reverse_proxy 127.0.0.1:3000
}

api.example.com {
    reverse_proxy 127.0.0.1:4000
}

これでapp.example.comがポート3000のアプリに,api.example.comがポート4000に振り分けられ,両方とも自動でHTTPS化される.Nginxでproxy_set_headerを並べた設定が,Caddyでは適切なヘッダも含めて1行で済む.

複数サイト・パス振り分け

複数のサイトやパスベースの振り分けも,Caddyfileに素直に書ける.フロント静的+API構成も簡潔だ.

パス振り分け(フロント+API)

example.com {
    handle /api/* {
        reverse_proxy 127.0.0.1:3000
    }
    handle {
        root * /var/www/frontend
        try_files {path} /index.html
        file_server
    }
}

handleでパスごとの処理を分けられる./api/*はアプリへ,それ以外は静的配信(SPA対応のtry_files付き)── という構成が,ネストした素直な記述で書ける.圧縮(encode gzip)なども1行追加するだけだ.

自動HTTPSの仕組みと注意点

Caddyの自動HTTPSは便利だが,仕組みを理解しておくとトラブル時に強い.Caddyは起動時にドメインの証明書を取得しに行くため,前提条件がある.

  1. ドメインがVPSのIPに向いていること(DNS設定).向いていないと証明書取得に失敗する.
  2. 80/443ポートが開いていること(ACMEチャレンジに必要).
  3. 証明書の保存先を永続化すること(コンテナ運用時はvolumeに).毎回再取得するとレート制限に当たる.

ローカル開発では,Caddyは内部用の自己署名証明書を自動生成することもできる.本番では公的な証明書,ローカルでは自己署名と,環境に応じて自動で振る舞いを変えてくれるのも賢い点だ.

Caddyの導入 ― サービスとして動かす

Caddyはsystemdサービスとして動かすのが本番運用の基本だ(systemdの記事も参照).Caddyfileを編集したらreloadで無停止反映できる.

Caddyの基本操作

# Caddyfileの構文チェック
caddy validate --config /etc/caddy/Caddyfile
# 無停止リロード
sudo systemctl reload caddy
# 状態確認
sudo systemctl status caddy
journalctl -u caddy -f

caddy validateで構文を確認してからreloadするのは,Nginxのnginx -tと同じ作法だ.Caddyはコンテナとしても動かせ,Docker環境では公式イメージを使ってcompose構成に組み込める.

Caddy・Nginx・Traefikの使い分け

3つのWebサーバー/プロキシの位置づけを整理しよう.それぞれ思想が異なる.

強み向いている場面
Caddy設定が最小・自動HTTPS手軽にHTTPSサイト/プロキシを立てたい
Nginx細かい制御・高速・枯れた安定複雑な要件・高トラフィック
Traefikコンテナ動的検出・自動化コンテナを頻繁に増減する環境

手軽さ最優先ならCaddy,制御と性能ならNginx,コンテナ動的環境ならTraefik.個人開発の小〜中規模で「とにかく簡単にHTTPS」ならCaddyが快適だ.迷ったらCaddyで始め,細かい制御が必要になったらNginxを検討する,という進め方もよい.

補論:Caddyの自動HTTPSは「固定IPと開いた80/443」で確実に動く

Caddyの自動HTTPSは魔法のように便利だが,ドメインがVPSのIPに向き,80/443が開いているという前提が要る.これが満たされていないと証明書取得に失敗する.

高速NVMe・50種類以上のOSテンプレートに対応した国内VPS─シン・VPS─ は固定IPを持ち,ファイアウォールで80/443を開けるだけでCaddyのACMEチャレンジが確実に通る.NVMe SSDで起動も速く,スナップショットで設定を試しては戻せるため,Caddyの手軽さを最大限に活かせる

Caddyでサイトを公開するには独自ドメインが必須だ.取り扱い400種類以上のドメイン取得サービス─ムームードメイン─ でドメインを取得してVPSに向ければ,Caddyfileにドメインを書くだけで,数分後にはHTTPSサイトが世界に公開される.

よくある質問(FAQ)

Q1.Caddyの一番の魅力は?

自動HTTPSだ.ドメインを書くだけで証明書の取得・更新が完全自動になる.Certbotの設定も更新の心配も要らない.設定ファイルも数行で済む手軽さも大きい.

Q2.Nginxから乗り換えるべき?

用途次第だ.手軽さを求めるならCaddy,細かい制御や高トラフィックの最適化が要るならNginx.新規の小〜中規模サイトならCaddyが快適なことが多い.

Q3.自動HTTPSが失敗する

ドメインがVPSのIPに向いているか,80/443が開いているかを確認する.証明書の保存先を永続化しないと再取得を繰り返してレート制限に当たることもある.

Q4.細かい制御はできる?

Nginxほどではないが,圧縮・ヘッダ・認証・パス振り分け・ミドルウェアなど実用的な機能は揃っている.非常に特殊な要件でなければCaddyで足りることが多い.

Q5.コンテナでも使える?

使える.公式Caddyイメージをcompose構成に組み込める.証明書保存先をvolumeに永続化するのを忘れずに.コンテナ環境ではTraefikと並ぶ選択肢になる.

Q6.本番運用での注意点は?

証明書の永続化と,Caddyfileの構文チェック(caddy validate)だ.systemdサービスとして動かし,変更はreloadで無停止反映する.基本はNginx運用と同じ作法でよい.

まとめ ― 最小の手間でHTTPSを手に入れる

Caddyは,数行のCaddyfileと自動HTTPSで,最小の手間でHTTPSサイト・リバースプロキシを立てられるWebサーバーだ.証明書を一切意識せず運用できる手軽さが最大の価値だ.

今日やるべきことは,Caddyをインストールし,ドメイン1つ分のCaddyfileを書いてHTTPSサイトを立てること.証明書が自動で取れる体験は,一度味わうと手放せない.

手軽さは正義だ.固定IPと開いた80/443のVPSがあれば,Caddyは数分であなたのサイトをHTTPSで世界に公開する.