ブログ一覧に戻る

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

5 min read
CaddyServerInfra

あいさつ

どうも、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-ForX-Forwarded-ProtoX-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

Caru

エンジニアを目指す大学生。20歳。
東洋大学情報連携学部(INIAD)所属(28卒)。