web-dev-qa-db-ja.com

nginxのページの読み込みが非常に遅い

以前使用したのと同じ構成の新しい環境に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を通過すると上記のパフォーマンスの問題が発生します。誰かアイデアはありますか?

4
user2630270

バッファリングはそこで問題を引き起こします、それを完全にオフにしてください:

proxy_buffering off;

詳細は 公式ドキュメント を参照してください:

バッファリングを無効にすると、応答は受信と同時にクライアントに同期的に渡されます。 nginxはプロキシされたサーバーからの応答全体を読み取ろうとしません。 nginxが一度にサーバーから受信できるデータの最大サイズは、proxy_buffer_sizeディレクティブによって設定されます。

10
Anatoly