WordPress

WordPressでの画像アップロード問題とNginx設定の調整

wordpressさん「サーバーが画像を処理できません」

原因はどこかの設定ファイルだろうなと思いつつ、これを解決するためのいくつかのステップを踏んだ経験を共有したいと思います。この記事が、同様の問題に直面している方々の助けになれば幸いです。主に未来の自分。

環境
Ubuntu 23.10でPHP 8.2

問題の説明:
問題は、WordPressサイトでたいして大きくもない画像ファイルをアップロードしようとしたときに発生しました。エラーメッセージは、サーバーが画像を処理できないことを示唆していました。サーバーが忙しいか、リソースが不足している可能性があります。しかし、このサーバーはほかの用途に使っていないので、わたしとしてはどちらも否定したい。

ということで、調べてみよう

初期の対応策:
最初の対応策として、WordPressのwp-config.phpファイルにdefine('WP_MEMORY_LIMIT', '256M');を追加し、メモリ制限を増やしてみました。このコードはファイルのほぼ一番下のあたりに/* That's all, stop editing! Happy publishing. */という行があるので、その上に記述しました。

/* Add any custom values between this line and the "stop editing" line. */

define('WP_MEMORY_LIMIT', '256M');


/* That's all, stop editing! Happy publishing. */

このコードは、WordPressが実行される際にPHPが使用できるメモリの上限を256メガバイトに設定します。これは、WordPressがより多くのメモリを必要とするようなメモリ集約的な操作やプラグインを使用する際に特に重要です。デフォルトのメモリ制限を超えるような状況で、サイトのパフォーマンスを改善するために使われます。

しかし、これだけでは問題は解決しませんでした。ということで一歩戻って、次へ進みます。

PHP-FPMの設定変更:
PHP-FPMの設定ファイルにおいて、memory_limitupload_max_filesize、およびpost_max_sizeを適切な値に変更しました。これは、サーバー側のPHP処理におけるメモリ制限やアップロードサイズの制限を緩和するための重要なステップです

buntu 23.10でPHP 8.2を使用している場合のmemory_limitupload_max_filesize、およびpost_max_sizeに関する設定は、PHPの設定ファイル(php.ini)で行います。これらの設定は、PHPスクリプトの実行に関わる重要なリソース制限を定義します。

  1. memory_limit:
    • この設定は、スクリプトが消費できる最大メモリ量を定義します。サーバー上で実行されるPHPアプリケーションが大量のデータを処理する必要がある場合、この値を増やすことが有効です。
    • 例:memory_limit = 256M(256メガバイトまでメモリ使用を許可する)
  2. upload_max_filesize:
    • この設定は、PHPを介してアップロードできる最大ファイルサイズを定義します。サーバーに大きなファイルをアップロードする必要がある場合に、この値を増やす必要があります。
    • 例:upload_max_filesize = 100M(最大100メガバイトのファイルアップロードを許可する)
  3. post_max_size:
    • この設定は、POSTメソッドを通じて送信できるデータの最大サイズを定義します。通常、これはupload_max_filesizeよりも大きく設定され、ファイルアップロードに加えて、他のPOSTデータも含めることができます。
    • 例:post_max_size = 120M(POSTリクエスト全体として最大120メガバイトを許可する)

設定ファイルのパス: Ubuntu 23.10でPHP 8.2を使用している場合、PHPの設定ファイル(php.ini)は次のいずれかの場所に存在する可能性が高いです:

  • /etc/php/8.2/cli/php.ini:コマンドラインインターフェース用の設定。
  • /etc/php/8.2/apache2/php.ini:Apacheサーバー用の設定(Apacheを使用している場合)。
  • /etc/php/8.2/fpm/php.ini:PHP-FPM用の設定(PHP-FPMを使用している場合)。

Nginx設定の確認:
サーチアンドデストロイの心構えで、Nginxサーバーの設定を見直すことにしました。問題は、client_max_body_size ディレクティブの設定にありました。設定というかclient_max_body_sizeの記述がありませんでした。これはクライアントリクエストのボディサイズの最大値を設定するもので、デフォルトではこの値は1M(1メガバイト)に設定されており、大きなファイルのアップロードには不十分です。私のケースではこの値が小さすぎたために問題が発生していたのです。

なお、この項目が一番最後に来た理由は、こんなの最初に構築するときしか調べないから覚えていなかった。しかし、それ故に原因はNginxにあることがなんとなく推測できていた。からです。

解決策の適用:
Nginxの設定ファイル(通常は /etc/nginx/nginx.conf)を開き、http { ... } ブロック内で client_max_body_size100M(100メガバイト)に設定しました。この変更を適用した後、Nginxを再起動し、設定が正しく機能しているかを確認しました。

結論:
この変更により、画像アップロードの問題は無事解決されました。この経験を通じて、サーバー設定の重要性と、エラーメッセージが示す背後の原因を理解することの大切さを深く学びました。特定の設定値を単に覚えるのではなく、各コードがどのような目的で動作しているのかを理解することで、自身で正しい判断を下す能力が養われると思います。

つまりこれは「忘れないように付箋に書いて張っておこう」という記事ですねhaha

Tagged ,

コメントを残す

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