ラベル nginx の投稿を表示しています。 すべての投稿を表示
ラベル nginx の投稿を表示しています。 すべての投稿を表示

2020年11月2日月曜日

リバースプロキシ(nginx)環境下で、WordPressのメニューが更新できない(エラーになる)

 保存しようとすると、下記のエラーがでます。

  • 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;

今回は、赤文字の部分を
  • proxy_buffers 100 128k;
とすることで問題解決できた。
ようは、バッファーの受け皿としてバッファーサイズが足りていないのではなく、最大個数がたりていなかった(4→100とした)のだった。

PHPの調整


下記をいろいろしたが解決せず。結局リバースプロキシのバッファー設定の問題だった。

2020年11月2日 @kimipooh

2016年9月21日水曜日

「nginx + リバースプロキシキャッシュ」において、User Agent ベースでテーマ切り替えやスマホ対応している場合の問題

随分前からある Tipsのようですが、nginx に移行して初めて遭遇したので、備忘録として残しておきます。まぁ遭遇したサーバーが網元(AMIMOTO)さんだったので、サポートに問い合わせたら件名の可能性について回答してくださったので手間取らずに済みました!

最近はレスポンシブ・ウェブ・デザインでスマホ対応していたので、気づいてなかったのでしょうね...

スマホ対応には、いろいろ方法はあると思いますが、まぁデザインやレイアウトに疎い私が把握・理解できる範疇では下記の2つぐらいかなーと思います。それぞれ nginx + リバースプロキシ配下でどう対応するかをメモっておきます。

1. レスポンシブ・ウェブ・デザイン


対応の必要なし

2. User Agent にて表示変更


モバイル判定したものについては、キャッシュを削除する必要あり。
Nginx でモバイル判定させ、その情報をもとにリバースプロキシキャッシュを削除するということになりますね。一番簡単なのは

  1. Nginx Cache Controller プラグインの導入
  2. nginx設定に、モバイル判定設定を組み込む
     参考:[WordPress] nginxでモバイルとPCでテーマを分ける方法(Qiita)
  3. テーマの functions.php にNginx Cache Controller を使ってモバイル用のキャッシュを削除するフィルタを追加
     参考:網元で WPtouch を使用する際の設定(網元)

当方は、WPtouch Mobile Plugin が利用されていたサイトだった事、網元をつかっていたので、まさにこのヘルプをみて解決できました!! 


3. User Agent でテーマ変更


これも基本は「2」と同じですが、便利なプラグインがあります。
  1. Nginx Cache Controller プラグインの導入
  2. nginx設定に、モバイル判定設定を組み込む
  3. Nginx Mobile Theme プラグインを使って利用する
どう設定するかは、上記2つのプラグイン作者のサイト

2016年9月21日 @kimipooh

2016年5月20日金曜日

【備忘録】nginx における WordPressのJetpackにより WordPress.com 対策

以前、Apacheのケースについては
で説明していました。
nginx についても説明しているところはありますが、まだApacheほど数も多くなく、後から探すのが面倒なので書き出しておきます。

一般的な設定(パスワード保護された WordPressも対応)


location ~* /xmlrpc\.php$ {
  access_log off; log_not_found off;
  satisfy any;
  allow 192.0.64.0/18;
  allow 使用中の端末IPアドレス;
  deny all;

  location ~ \.php$ {
     include /etc/nginx/php-fpm;
  }
}

サイトの構築によっては変わるので、一般的な設定の例示とします。

allow 使用中の端末IPアドレス;


まず最初に、自分の端末のIPアドレスを入れてください。
これは本当に xmlrpc.php へのアクセスをしていて、それがブロックされるかのチェックのためです。自分の今使っている(プロバイダの場合には動的なので変化します)IPアドレスを、「IPアドレスチェック」 とかで検索して調べてみてください。

nginx を reload して xmlrpc.php にアクセスしてみる


サイトURL/xmlrpc.php にアクセスして、
  • XML-RPC server accepts POST requests only.
と出ればアクセスOKです。
そして
# allow 使用中の端末IPアドレス;
として無効化して、nginx を reloadします。

サイトURL/xmlrpc.php にアクセスして、403 Forbidden とアクセス拒否されればOKです。

設定の個別説明


さてその他の設定について説明しておきます。