🔐

Caddy 2で簡単にhttps Webサーバー構築

に公開

この記事は

Caddy 2を使って、簡単にhttpsのWebサーバーを構築する方法を紹介します。
https://caddyserver.com/

CaddyはGo言語で書かれたWebサーバーで、以下のような特徴があります。

  • Let's Encryptを利用して自動的にSSL証明書を取得し、HTTPSを有効化
  • 証明書の更新も自動で行う
  • httpアクセスを自動でhttpsにリダイレクト

今回は、CaddyをHTTPS化のためのリバースプロキシーとしてのみ使用し、リクエスト処理は他の使い慣れたWebサーバー(例: nginx等)に委任する構成を紹介します。

docker composeファイルの作成

今回はdocker composeを使用してCaddy 2を実行します。以下のdocker-compose.ymlファイルを作成します。

docker-compose.yml
services:
  caddy:
    image: caddy:2
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./data:/data 
      - ./config:/config
      - ./log/caddy:/var/log/caddy
    restart: unless-stopped

Caddyfileの設定

次に、Caddyの設定ファイルであるCaddyfileを作成します。以下は、リバースプロキシーとして機能する基本的な設定例です。
docker-compose.ymlと同じディレクトリにCaddyfileを作成してください。

Caddyfile
{
    log default {
        output file /var/log/caddy/caddy.log {
            roll_size 10mb
            roll_keep 20
            roll_keep_for 720h
        }
    }
}

# myserver1.example.comをlocal-server1:10080に転送
myserver1.example.com {
    reverse_proxy http://local-server1:10080
}

# myserver2.example.comをlocal-server2:10080に転送
# myserver2.example.com/api/*へのリクエストはlocal-api-server:10080に転送
myserver2.example.com {
    reverse_proxy /api/* http://local-api-server:10080
    reverse_proxy http://local-server2:10080
}

Caddyfileの書式については以下を参照してください。
https://caddyserver.com/docs/caddyfile

Caddyの起動

Caddyを起動するには、以下のコマンドを実行します。

docker compose up -d

Caddyが起動すると、指定したドメインに対してHTTPSが有効化され、Let's Encryptを使用して自動的にSSL証明書が取得されます。

動作確認

Caddyが起動したら、設定したサーバー名(例の場合はhttps://myserver1.example.comhttps://myserver2.example.com)にブラウザでアクセスして、HTTPSが正しく機能していることを確認します。

まとめ

Caddy 2を使用することで、簡単にHTTPS対応のWebサーバーを構築できます。Let's Encryptを利用して自動的にSSL証明書を取得し、証明書の更新も自動で行うため、運用が非常に楽になります。
Caddyは設定がシンプルで、リバースプロキシーとしても非常に使いやすいです。特に、複数のドメインを扱う場合でも、Caddyfileの記述が簡潔でわかりやすいのが魅力です。

Discussion