【Docker】WordPressのテーマ容量オーバー(413 Error)をコンテナ環境で美しく解決する方法

こんにちは。

Docker Composeを使って軽量で堅牢なWordPress環境を構築したあと、お気に入りの高機能テーマ(NewsMunch Proなど)をアップロードしようとした際、以下のようなエラーに阻まれた経験はないでしょうか。

  • 413 Request Entity Too Large(Nginx側のエラー画面)
  • 「アップロードしたファイルはphp.iniで定義されたupload_max_filesizeを超えています」(WordPress側の警告)

コンテナ環境におけるこの問題は、サーバー全体のプランを上げる必要はなく、「2つの設定ファイルを書き換えてコンテナをリフレッシュするだけ」で美しく解決できます。今回はその構造と具体的な手順を解説します。

1. エラーが発生する構造(原因)

このエラーが発生する理由は、外部からのアクセスをせき止めている「Nginx(リバースプロキシ)」と、Webアプリケーションを動かしている「WordPress(PHP)」の双方に、初期設定として安全のための「容量制限(デフォルトは2MB〜数MB程度)」が課されているためです。

リッチなテーマファイル(数テンMB〜)を投げ込んだ際、システムは以下の2つの関門で通信を遮断します。

Plaintext

 [ユーザー] ──(テーマファイル: 30MB)──> [第1関門: Nginx] (2MB制限で413エラー)
                                             │ (通過した場合)
                                             ▼
                                        [第2関門: PHP] (upload_max_filesize超過)

これを突破するには、NginxとWordPress(PHP)の双方の制限値を、一律で「50MB」などの適切な値へ引き上げる必要があります。

2. 3ステップによる解決手順

ホスト側の設定ファイルを修正し、コンテナへ安全に反映させます。

ステップ①:Nginxの許容量を拡張する

Nginxの設定ファイル(例:./nginx/conf.d/default.conf)を開き、server ブロックまたは location ブロック内に client_max_body_size の設定を追加します。

Nginx

server {
    listen 80;
    server_name example.com;

    # ★クライアントからの最大アップロード許容量を50MBに拡張
    client_max_body_size 50M;

    location / {
        proxy_pass http://wordpress:80;
        # (その他のプロキシ設定)
    }
}

ステップ②:WordPress(PHP)の許容量を拡張する

次に、PHP側の制限を解除するための設定ファイル(例:./uploads.ini)をホスト側に新規作成(または編集)します。

Ini, TOML

# ./uploads.ini の中身
file_uploads = On
memory_limit = 256M
upload_max_filesize = 50M
post_max_size = 50M
max_execution_time = 300

※このファイルを、docker-compose.yml 内の wordpress サービスで以下のようにマウント(同期)させていることを確認してください。

YAML

volumes:
  - ./wordpress:/var/www/html
  - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini # ★ここ

ステップ③:コンテナの「完全リフレッシュ」を実行する

設定ファイルを書き換えただけでは、現在メモリ上で動いているコンテナプロセスには反映されません。 設定を100%確実に適用するため、コンテナを一度完全に破棄して再生成(完全リフレッシュ)します。以下のコマンドをVPSのターミナルで実行します。

Bash

# 稼働中のコンテナを停止して完全に削除
docker compose down

# 設定ファイルを読み込み直して、バックグラウンドで再起動
docker compose up -d

※データ永続化(volumes)が正しく設定されていれば、コンテナを一度削除しても構築中のブログデータが消えることはありません。

3. 動作確認と技術的メリット

再起動後、WordPressの管理画面から「メディア」->「新規追加」を開き、「最大アップロードサイズ: 50 MB」 と表示されていれば設定変更は成功です。これで大容量の高級テーマも一瞬でインストール可能になります。

このアプローチの技術的利点

共用レンタルサーバーの場合、これらの上限値はサーバー会社が一律で管理しているため、ユーザーが自由に上限を広げることはほぼ不可能です。

しかし、VPS上のDocker環境であれば、設定ファイルの書き換えと docker compose down && docker compose up -d という数秒のオペレーションだけで、「必要なコンテナの、必要なパラメータだけをピンポイントで最適化」できます。他のZabbixやGrafanaといった監視コンテナの挙動を一切邪魔することなく、Webサーバーのスペックを自力で拡張できる点に、コンテナ運用の本質的な強みがあります。

予期せぬ制限の壁に遭遇した際は、ぜひこの手順でインフラをスマートにコントロールしてみてください。

Related Posts

【WordPress高速化】NginxキャッシュとOPcacheでレスポンス速度を爆速にする方法

こんにちは。 WordPressサイトの表示スピードは、検索…

【SSL/TLS対応】Certbot(Let’s Encrypt)でDocker上のWebサイトを完全HTTPS化する手順

こんにちは。 Webサービスやブログを公開する際、通信を暗号…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

You Missed

【SSHセキュリティ強化】パスワード認証廃止と公開鍵認証・ポート変更の完全手順

【SSHセキュリティ強化】パスワード認証廃止と公開鍵認証・ポート変更の完全手順

【Linuxトラブルシューティング】ディスク容量100%エラー!原因特定とログ削除の緊急対処法

【Linuxトラブルシューティング】ディスク容量100%エラー!原因特定とログ削除の緊急対処法

【Docker Compose】複数ドメインを1台のVPSで運用するNginxリバースプロキシ設計パターン

【Docker Compose】複数ドメインを1台のVPSで運用するNginxリバースプロキシ設計パターン

【SSL/TLS対応】Certbot(Let’s Encrypt)でDocker上のWebサイトを完全HTTPS化する手順

【SSL/TLS対応】Certbot(Let’s Encrypt)でDocker上のWebサイトを完全HTTPS化する手順

【WordPress高速化】NginxキャッシュとOPcacheでレスポンス速度を爆速にする方法

【WordPress高速化】NginxキャッシュとOPcacheでレスポンス速度を爆速にする方法

【自動化】Bashシェルスクリプトで作る!デイリーDBバックアップ&Discord通知システム

【自動化】Bashシェルスクリプトで作る!デイリーDBバックアップ&Discord通知システム