以前使用したのと同じ構成の新しい環境にnginxをデプロイしたところ、非常に奇妙な動作が見られました。
NginxはSolrのリバースプロキシとして構成されています。nginxを介してSolr UIにアクセスしようとすると、ロードに約1分かかります。私はChrome開発ツールを確認しましたが、ブラウザはすぐに6つのファイルをダウンロードできるようですが、他のすべての要求は保留中の状態になっています。 1分後にすべてがダウンロードされ、ページが読み込まれます。その後、ブラウジングは高速になります。これは、主にローカルブラウザのキャッシュが原因であると思います。
これが設定です:
worker_processes 10;
error_log /directory/path/error.log debug;
pid /directory/path/nginx1.pid;
events {
worker_connections 1024;
}
http {
access_log /directory/path/access.log;
proxy_temp_path /directory/path/ 1 2;
upstream backend-test-old {
server 1.1.1.1:7071;
server 2.2.2.2:7071;
}
server {
listen 7071;
server_name localhost;
access_log /directory/path/access_7071.log;
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";
location /solr {
proxy_pass http://backend-test-old;
}
}
}
ログにもこれらの多くが表示されます。
2015/07/10 11:06:38 [warn] 31503#0: *120 an upstream response is buffered to a temporary file /dir/path/7/00/0000000007 while reading upstream, client: 111.111.111.111
2015/07/10 11:06:36 [info] 31503#0: *96 client prematurely closed connection, so upstream connection is closed too while connecting to upstream,
2015/07/10 11:06:36 [error] 31503#0: *101 upstream timed out (110: Connection timed out) while connecting to upstream, client:
これは同じ構成を実行し、比較的同様に構成する必要がある私の開発サーバーでは問題ではないので、システムに関連している可能性がありますが、よくわかりません。
どんな助けでも大歓迎です。
ありがとう
編集:
問題は、IP対ホスト名でバックエンドホストを指定しているようです。これが問題である理由はわかりません。私はこの設定を実装しました:
worker_processes 10;
error_log /path/error.log debug;
pid /path/nginx1.pid;
events {
worker_connections 1024;
}
http {
access_log /path/access.log;
proxy_temp_path /pathproxy_temp/ 1 2;
upstream backend-test-old {
server hostname-for-1.1.1.1:7071;
server hostname-for-2.2.2.2:7071;
}
upstream backend-test-old2 {
server 1.1.1.1:7071;
server 2.2.2.2:7071;
}
server {
listen 7071;
server_name localhost;
access_log /path/access_7071.log;
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";
location /solr {
proxy_pass http://backend-test-old;
}
}
server {
listen 7072;
server_name localhost;
access_log /path/access_7072.log;
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";
location /solr {
proxy_pass http://backend-test-old2;
}
}
}
7071を通過すると問題なく動作しますが、7072を通過すると上記のパフォーマンスの問題が発生します。誰かアイデアはありますか?
バッファリングはそこで問題を引き起こします、それを完全にオフにしてください:
proxy_buffering off;
詳細は 公式ドキュメント を参照してください:
バッファリングを無効にすると、応答は受信と同時にクライアントに同期的に渡されます。 nginxはプロキシされたサーバーからの応答全体を読み取ろうとしません。 nginxが一度にサーバーから受信できるデータの最大サイズは、proxy_buffer_sizeディレクティブによって設定されます。