nginxリバースプロキシ、キャッシュとストアを使用する場合


8

プロジェクトのWebスタックを次のように再構築している最中です:nginx-> haproxy->多くの(apache / passenger rails)インスタンス

目標のいくつかは次のとおりです。

  • ページキャッシュの単一の場所(現在、各Apacheマシンのレールを介して行われています)
  • より高速な静的コンテンツ
  • 内部パイプラインからSSLを削除する
  • ip logging(以前はtcpモードでhaproxyを実行したために失われました)

画像/スタイルシート/ JavaScriptアセットは、適切なヘッダーとともにキャッシュキャッシュされます。ページキャッシングは内部パラメーターに基づいており、一般的なキャッシュコントロールに応答するべきではありません。これらの目的を達成するために、構成は次のようになります。

server {

    ...

    location /really_slow_dynamic_content/ {
        root /var/www/tmp;
        error_page 404 = @fetch;
    }

    location @fetch {
        internal;
        proxy_pass   haproxy_ip;
        proxy_store  /var/www/tmp${uri}_cache.html;
        proxy_store_access  user:rw  group:rw  all:r;
    }

    location /assets/ {
        proxy_pass   haproxy_ip;
        proxy_cache  assets;
    }

    location / {
        proxy_pass   haproxy_ip;
    }
}

私はそれほどシステム管理者ではありません。役立つ可能性のある代替案、微調整、追加機能がたくさんあることを知っています。また、proxy_cacheとproxy_storeの違いもよくわかりません。だから私の実際の質問に...

アセットをnginxマシンに移動するまで、アセットにproxy_cacheを使用し、遅い動的コンテンツにproxy_storeを使用することには意味がありますか?

また、考慮すべき他の考慮事項やソフトウェアがある場合は、それらについて聞いてみたいと思います。ありがとうございました!


この質問を投稿してから、私が使用した初期設定ではストアがまったく使用されておらず、公式のwikiの例(semi?)のerror_pageと内部設定は厳密にはオプションではありませんでしたそれは機能しているようで、機能している設定はこの質問のより良い遺産のようです)。したがって、ストアを使用してフルページを作成するのが遅い(そしてまれに更新される)こと、および画像、JavaScriptなどの実際のキャッシュを使用することは、かなりうまく機能しているようです。少なくとも私の問題を追跡するための手掛かりを与えてくれたので、私は1つの回答を受け入れますが、2つのディレクティブが意図された方法で使用されているかどうかはまだわかりませんかどうか(まあ、少なくともストアに関しては、キャッシュはもう少し明白に思えます)。


従来の目的のために、この議論はこれらの問題を扱うときに私にとって非常に役に立ちました。 ruby-forum.com/topic/140396
Chris

回答:


3

メモリが適切に機能する場合、proxy_storeはアイテムのリクエストのバイナリ表現を格納し、proxy_cacheはアイテムのキャッシュされたコピーをそのベースフォームに格納します。

proxy_cacheは実際には複数のレベルを持つ適切なキャッシングエンジンであり、同じキーを使用して複数のサイトからのコンテンツを格納するのに適しています。

個人的には、proxy_cacheを使用して、静的コンテンツサーバーのそれぞれに20億を超える製品画像を保存しています。


1

proxy_storeは、オブジェクトの「オンデマンド」ミラーを作成するために使用されます。指定されたアイテムがバックエンドに存在するのと同じパスにアイテムを配置します。

遅い動的コンテンツの場合、キャッシュの期限切れをサポートするため、proxy_cacheがより適切です。

proxy_storeの方が便利な例としては、rpmファイルのミラーがあり、1つのファイル名/バージョンを期限切れにする必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.