2026年6月2日
2026年6月2日
CaddyでWordPressを動かす方法|PHP-FPMと自動HTTPSの設定手順
Caddyの特徴
CaddyはGo言語で書かれたWebサーバーです。WordPressで使う場合、次の点が便利です。
- ドメイン名を書くだけで、Let's Encryptなどから証明書を自動で取得・更新し、HTTPからHTTPSへのリダイレクトも行う(自動HTTPS)
php_fastcgiの1行で、PHP-FPMへの受け渡しと、WordPressのパーマリンクに必要な書き換え(存在しないパスをindex.phpへ回す)がそろう- 設定ファイル(Caddyfile)が短い
一方、Apacheの .htaccess は読みません。.htaccess に書くタイプのプラグインの設定(キャッシュ、リダイレクト、アクセス制限など)は効かないので、必要なものはCaddyfileに書き直します。
この記事では、Ubuntu 24.04、PHP 8.3(Ubuntu 24.04の標準)、MariaDBの組み合わせを例にします(2026年10月時点)。Debian 12ではPHP 8.2になるので、パスの 8.3 を読み替えてください。
前提
- サーバーのグローバルIPアドレスに、ドメインのAレコード(必要ならAAAAレコード)を向けてある
- ファイアウォールで80番と443番(TCP)を開けてある。証明書の取得と、HTTPからHTTPSへのリダイレクトに80番も使う
- ほかのWebサーバー(Apache・Nginx)が80番・443番を使っていない
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
手順1: Caddyをインストールする
Caddy公式ドキュメントにある、Debian・Ubuntu向けの手順です。
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
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 chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
インストールすると caddy サービスが caddy ユーザーで起動し、設定ファイルは /etc/caddy/Caddyfile になります。
systemctl status caddy
caddy version
手順2: PHP-FPMとMariaDBを入れる
sudo apt install -y php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-xml php-zip mariadb-server
PHP-FPMのソケットの場所を確かめます。Ubuntu 24.04では /run/php/php8.3-fpm.sock です。
ls /run/php/
PHP-FPMは www-data ユーザーで動き、ソケットは www-data グループだけが読み書きできる設定になっています。Caddyは caddy ユーザーで動くため、そのままではソケットに接続できず、502エラーになります。caddy ユーザーを www-data グループに加えます。
sudo usermod -aG www-data caddy
sudo systemctl restart caddy
手順3: データベースとWordPressを用意する
データベースとユーザーを作ります。パスワードは自分で決めたものに置き換えてください。
sudo mariadb
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'ここに強いパスワード';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
EXIT;
WordPressを公式サイトから取得して配置します。
cd /tmp
curl -O https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
sudo mv wordpress /var/www/wordpress
sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 750 {} +
sudo find /var/www/wordpress -type f -exec chmod 640 {} +
所有者を www-data、グループに読み取りを許す権限にしておくと、PHP(www-data)は書き込みができ、Caddy(www-data グループに追加済み)は画像やCSSなどの静的ファイルを読めます。
手順4: Caddyfileを書く
/etc/caddy/Caddyfile を次の内容に置き換えます。example.com と admin@example.com は自分のものに変えてください。
{
email admin@example.com
}
example.com, www.example.com {
root * /var/www/wordpress
encode zstd gzip
@uploads_php path /wp-content/uploads/*.php
respond @uploads_php 403
php_fastcgi unix//run/php/php8.3-fpm.sock
file_server
log {
output file /var/log/caddy/example.com.log
}
}
| 行 | 意味 |
|---|---|
email |
証明書の発行元に登録する連絡先(期限切れの案内などが届く) |
example.com, www.example.com |
このサイトで受けるドメイン。書いたドメインの証明書が自動で取得される |
root |
WordPressを置いたディレクトリ |
encode zstd gzip |
応答の圧縮 |
@uploads_php と respond |
アップロード用ディレクトリに置かれたPHPファイルの実行を拒否する(不正アップロード対策) |
php_fastcgi |
PHP-FPMへ渡す。存在しないパスは index.php に回すので、パーマリンクがそのまま動く |
file_server |
画像・CSS・JavaScriptなどの静的ファイルを返す |
log |
アクセスログをファイルに書く |
設定を整形・検証してから読み込み直します。
sudo caddy fmt --overwrite /etc/caddy/Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
証明書の取得に失敗していないかは、サービスのログで確認します。
sudo journalctl -u caddy --no-pager -n 50
DNSがまだサーバーを向いていない、80番か443番が閉じている、といった場合は、ここに証明書取得のエラーが出ます。
手順5: WordPressをインストールする
ブラウザで https://example.com/ を開くと、WordPressのインストール画面が表示されます。手順3で作ったデータベース名・ユーザー名・パスワードを入力し、ホストは localhost のまま進めます。
CaddyはTLSで受けたリクエストをPHPに渡すとき、FastCGIの HTTPS 変数を on にします。そのため、WordPressはHTTPSでのアクセスだと判断でき、wp-config.php にHTTPS判定のための追記は要りません(Caddyの前にさらにロードバランサーやCDNを置く構成は別です)。
インストール後、設定 → パーマリンク で「投稿名」などを選び、記事のURLが開けることを確認します。
アップロードできるファイルの大きさを変える
Caddyは標準ではリクエストの大きさを制限しないので、上限はPHPの設定で決まります。大きな画像や動画をアップロードする場合は、/etc/php/8.3/fpm/php.ini の次の値を変えます。
upload_max_filesize = 64M
post_max_size = 64M
sudo systemctl restart php8.3-fpm
うまく動かないとき
| 症状 | 確認すること |
|---|---|
| 502 Bad Gateway | php_fastcgi のソケットのパスが ls /run/php/ と一致しているか。caddy ユーザーが www-data グループに入り、Caddyを再起動したか |
| 画像やCSSが403・404になる | file_server を書いたか。ファイルとディレクトリが www-data グループに読める権限か |
| 記事のURLが404になる | root のパスが正しいか。php_fastcgi を書いているか |
| HTTPSにならない、証明書エラー | DNSの向き先、80番・443番の開放、journalctl -u caddy のエラー |
| プラグインのリダイレクトやアクセス制限が効かない | .htaccess に書く方式ではないか。Caddyfileに同じ内容を書く |
運用のポイント
- 証明書の更新はCaddyが自動で行います。cronやcertbotの設定は要りません。
- Caddy本体はaptで更新されます。
sudo apt upgradeの後は、systemctl status caddyで動いていることを確かめます。 - 設定を変えたら
caddy validateで確認してからsystemctl reload caddyで読み込み直すと、書き間違いでサイトが止まるのを防げます。 - データベースとファイルのバックアップは別途用意します。WordPressのバックアップを自動化するBashスクリプトの手順がそのまま使えます。