Mac mini サーバーで Apache の 80/443 を Caddy に移行する(Reverse Proxy 構成)

自宅サーバーで Apache を直接 80/443 で公開していたが、SSL管理やサービス追加を簡単にするため Caddy をフロントに置く構成に変更した。

構成としては以下になる。

Internet

Cloudflare

Caddy (80/443)

Apache (8080)

WordPress

この構成にすると

  • SSL終端を Caddy に統一できる
  • reverse proxy でサービス追加が簡単
  • Apache 設定がシンプルになる

以下に 完全コピペ可能な手順をまとめる。


1 Apache を 8080 に変更

まず Apache が使用するポートを変更する。

sudo nano /usr/local/etc/httpd/httpd.conf

Listen を変更する。

Listen 8080

ServerName も念のため確認する。

ServerName localhost:8080

保存後、設定確認。

httpd -t

Apache 再起動。

brew services restart httpd

動作確認。

curl -I http://localhost:8080


2 HTTPS強制リダイレクトを停止

以前 Apache で HTTPS リダイレクトを設定していると

Caddy とループするためコメントアウトする。

sudo nano /usr/local/etc/httpd/httpd.conf

以下を無効化。

#RewriteCond %{HTTPS} off

#RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


3 Caddy インストール

brew install caddy


4 Caddyfile 作成

sudo nano /usr/local/etc/Caddyfile

以下を書く。

example.com, www.example.com {
tls /path/to/fullchain.pem /path/to/privkey.pem

reverse_proxy 127.0.0.1:8080 {

    header_up Host {host}

    header_up X-Forwarded-Host {host}

    header_up X-Forwarded-Proto https

    header_up X-Forwarded-Port 443

}

}

5 Caddy 設定確認

caddy validate –config /usr/local/etc/Caddyfile

正常なら

Valid configuration

と表示される。


6 Caddy 起動

brew services start caddy

確認

brew services list


7 ポート確認

sudo lsof -i :80 -i :443 -i :8080

期待される状態

caddy  LISTEN :80

caddy  LISTEN :443

httpd  LISTEN :8080


8 動作確認

DNS を使わずローカルテスト。

curl -k -I –resolve example.com:443:127.0.0.1 https://example.com

成功例

HTTP/2 200

server: Apache

via: 1.1 Caddy


9 IPv6 確認

IPv6 で接続テスト。

curl -6 https://example.com

成功すれば IPv6 公開も正常。


トラブルシューティング

Apache が起動しない

Address already in use

の場合。

lsof -i :8080

ポート競合を確認。


301 リダイレクトループ

原因

RewriteCond %{HTTPS}

Apache 側の HTTPS 強制。

解決

RewriteCond %{HTTPS}

RewriteRule

をコメントアウト。


DNS を使わずテスト

curl –resolve domain:443:127.0.0.1 https://domain


IPv6 確認

dig AAAA example.com


最終構成

Internet

Cloudflare

Caddy :443

Apache :8080

WordPress

この構成により

  • SSL管理の簡略化
  • reverse proxy によるサービス追加
  • Apache 設定の単純化

が実現できる。

家庭サーバーでも非常に扱いやすい構成である。