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 設定の単純化
が実現できる。
家庭サーバーでも非常に扱いやすい構成である。
