
WordPressのローカル開発環境「Local」で、Xserverの本番サイトからエクスポートしたデータをインポートしようとしたら、
「Import failed (500): Internal Server Error」
というエラーが出て止まってしまった──そんな経験をしました。
実際のエクスポートファイルのサイズは約 205MB。
一見それほど大きくないのに、何度やっても途中で失敗します。
最初はPHPのメモリ不足かと思い、php.ini を確認したのですが、問題なし。
ログを見てみると、こんな記録がありました。
[fcgid:warn] mod_fcgid: HTTP request length 30006902 (so far) exceeds MaxRequestLen (30000000)
どうやらこれが原因のようです。
mod_fcgid の制限が原因だった
Localのデフォルト設定では、Apacheが mod_fcgid というモジュールを使ってPHPを実行しています。
そしてこのモジュールには、アップロードできるリクエストサイズの上限が30MB という制限があります。
つまり、WordPressのインポートツール(All-in-One WP Migration)が200MB以上のファイルを送ろうとしても、
Apacheが「30MBを超えた時点で拒否」してしまうわけです。
エラーメッセージの「MaxRequestLen (30000000)」という数字がまさにそれ。
対処法を調べたが、設定ファイルが見つからない
本来であれば、httpd-fcgid.conf というファイルを編集してMaxRequestLen 1073741824 のように書き換えれば解決します。
しかし、LocalのApache環境にはこの設定ファイルが存在しません。
(少なくとも、C:\Users\<ユーザー名>\AppData\Roaming\Local\lightning-services\apache-xxx 以下には見つからない)
Localはあくまで開発向けの簡易サーバーなので、
Apacheの細かい設定にはあまりアクセスできない構造になっているようです。
nginxに切り替えたら一発で成功!
そこで試しに、Localのサイト設定を「Apache」から「nginx」に変更してみました。
結果──一発でインポート成功。
ログにもエラーは一切出ず、xserverで動いていたWordPressの内容がきれいに反映されました。
どうやら、nginxはリクエスト制限の設定(client_max_body_size)がゆるく、
Local環境では最初から十分なサイズに設定されていたようです。
本番環境(Xserver)との違い
ちなみに、XserverのWordPressはApache 2.4系ですが、
こちらは mod_fcgid ではなく PHP-FPM という仕組みで動いています。
そのため、xserver側では upload_max_filesize や post_max_size だけ調整しておけば、
同じような制限には引っかかりません。
まとめ
- Localでの「500 Internal Server Error」は mod_fcgid のリクエスト制限 が原因。
- LocalのApacheではその設定を変更できない(構成ファイルが非公開)。
- nginxに切り替える ことで問題は解決する。
- XserverではApacheでも正常(仕組みが違うため)。
WordPressをローカルで動かしている人は多いですが、
こうした“見えない部分の仕様差”に引っかかることがあります。
同じように「All-in-One WP Migrationのインポートで500エラーが出る」人は、
一度LocalのWebサーバーをnginxに変えてみるといいかもしれません。
あのエラーが嘘のように消えます。
(今回の環境メモ)
Local 9.2.9
Web Server: Apache 2.4 → nginx に変更
PHP: 8.1.29
データベース MriaDB 10.4.32
WordPress version 6.8.3
エクスポートファイル: 約205MB (.wpress)
コメント