Caru.moeCARU.moe
プロジェクトスキル経歴ブログ
ブログ一覧

© 2026 Caru

  • X
  • Discord
  • メール
Caddy

CABG-005 · 2025.11.30

Nginxはもう古い?最強のWebサーバーCaddyを使おう

3行のCaddyfileでHTTPSまで完了!Certbotもcronも要らず、Nginxから乗り換えたらもう戻れません

Server · Infra

あいさつ

どうも、Caruです。

皆さん、Webサーバーは何を使っていますか? 古き良きApache?それともデファクトスタンダードのNginx?

私は長らくNginxを使ってきましたが、最近CaddyというWebサーバーに完全に乗り換えました。 これがもう、便利すぎて戻れないんです。

今回は、そんなCaddyの魅力と、簡単な使い方を紹介したいと思います。

Caddyのここがすごい

1. HTTPS化が全自動

これが最大の魅力です。 NginxでHTTPS化しようとすると、Certbotを入れて、証明書を発行して、cronで更新設定をして...と結構手間ですよね。

Caddyなら、設定ファイルにドメインを書くだけで、Let's Encryptから証明書を自動で取得・更新してくれます。 本当にこれだけです。SSLの存在を忘れてしまうくらいです。

2. 設定ファイルがシンプルすぎる

Nginxのnginx.conf、書くの辛くないですか? 私は、直してはnginx -tでまたエラーを無限に繰り返してましたね(笑)

Caddyの設定ファイル(Caddyfile)は、人間が読み書きしやすいように設計されています。

例えば、example.comへのアクセスをローカルの3000番ポートに流す(リバースプロキシ)設定はこれだけ。

example.com {
    reverse_proxy localhost:3000
}

さらに、X-Forwarded-For、X-Forwarded-Proto、X-Forwarded-Hostといった、リバースプロキシでバックエンドに渡すべきヘッダーを自動で適切に設定してくれます。 デフォルトで外部からのこれらのヘッダーを無視して上書きしてくれるので、スプーフィング対策もバッチリです。

嘘みたいにシンプルですが、これでHTTPS化まで完了しています。

3. バイナリ一つで動く

CaddyはGo言語で書かれており、1つのバイナリファイルとして提供されています。 依存関係地獄に悩まされることもありません。ポータビリティ最高。

簡単な使い方

インストール

公式サイトの手順に従うのが一番ですが、Ubuntuならこんな感じでサクッと入ります。

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

静的サイトを公開する

カレントディレクトリにあるHTMLファイルを公開したいなら、コマンド一発です。

caddy file-server --listen :8080

これで http://localhost:8080 にアクセスすれば見れます。

リバースプロキシとして使う

Webアプリ開発者ならこれが一番多い用途でしょう。 Caddyfile という名前のファイルを作成し、以下のように記述します。

my-app.example.com {
    reverse_proxy localhost:8000
}

そして実行。

caddy run

これだけで、https://my-app.example.com にアクセスすると、自動的に証明書が取得され、localhost:8000 に転送されます。 開発環境でも本番環境でも、この手軽さは変わりません。

Dockerで使う

「環境を汚したくない」という方はDockerを使うのがおすすめです。 公式イメージが用意されているので、docker-compose.ymlを書くだけで起動できます。

version: "3.7"
 
services:
  caddy:
    image: caddy:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
 
volumes:
  caddy_data:
  caddy_config:

これだけで、ホスト側のCaddyfileを読み込んで起動してくれます。 データの永続化もボリュームで行っているので安心です。

まとめ

Caddy、いかがでしたか? 「Nginxの設定ファイルと格闘する時間」を「開発する時間」に変えられる、本当に素晴らしいツールです。

パフォーマンスもGo製なので非常に高速ですし、HTTP/3にもデフォルトで対応しています。 食わず嫌いせずに、ぜひ一度試してみてください。きっと気に入るはずです。

それでは、快適なサーバーライフを!

Caruこの記事を書いた人

Web開発が大好きな、エンジニアを目指す大学生です。

  • GitHub
  • Link集
前の記事GitHubで簡単にブログの記事を配信できるAPIを作ったCABG-004 · 2025.11.14次の記事Proxmox VMのディスク容量をDiscardで節約しようCABG-006 · 2025.12.7

目次

  1. あいさつ
  2. Caddyのここがすごい
  3. 1. HTTPS化が全自動
  4. 2. 設定ファイルがシンプルすぎる
  5. 3. バイナリ一つで動く
  6. 簡単な使い方
  7. インストール
  8. 静的サイトを公開する
  9. リバースプロキシとして使う
  10. Dockerで使う
  11. まとめ