保存しようとすると、下記のエラーがでます。
- 204 recv() failed (104: Connection reset by peer) while reading response header from upstream
これは時間がかかり過ぎて接続が切れたというものです。
様々な解決方法(後述)を試しましたが、うまくいかず最終的には次の方法で解決しました。なおリバースプロキシが原因と特定できたのは、クローンサイトを手持ちのローカル環境で再現すると、遅いながらも問題なくメニューが保存できたこと。まぁ遅いのは1つのサーバーの多数のウェブサイト(WordPress含む)を動作させていて、リソースが足りていないことが原因の1つではあったものと思う。特殊な事例なので記録に残しておく。
リバースプロキシキャッシュのバッファー調整
次の3つの数値を調整する。
- proxy_buffer_size 64k;
- proxy_buffers 4 128k;
- proxy_busy_buffers_size 128k;
調整については「nginx-WordPress リバースプロキシにおける バッファの最適化」を参考にした。
今回は、赤文字の部分を
- proxy_buffers 100 128k;
とすることで問題解決できた。
ようは、バッファーの受け皿としてバッファーサイズが足りていないのではなく、最大個数がたりていなかった(4→100とした)のだった。
PHPの調整
下記をいろいろしたが解決せず。結局リバースプロキシのバッファー設定の問題だった。
- max_input_vars を 1000→2000
- 参考:「カスタムメニューを追加すると別のメニューが消えていく現象への対策」
- php_admin_value[max_input_vars] = 2000
- client_body_buffer_size, client_max_body_size を容量大きくしてみる
- nginxのリクエストボディのバッファリングに関する問題とその改善策 (Qiita) への対応
- opcache.memory_consumption, opcache.max_accelerated_files を大きくしてみる
- 参考:「recv()が失敗しました(104:ピアによって接続がリセットされました)が、アップストリームから応答ヘッダーを読み取り中です」
- PHPの opcacheモジュールの設定変更
- php-fpm 設定でタイムアウト関連変更
- 参考:Nginx+PHP-FPM環境でtimeout対応
- request_terminate_timeout
- php_admin_value[max_input_time]
- php_admin_value[max_execution_time]
- php-fpm 設定で、メモリを増やす
- php_admin_value[memory_limit]
2020年11月2日 @kimipooh
0 件のコメント:
コメントを投稿