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スクリプトの手順がそのまま使えます。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲