Nginx Varnish Nginx Django?


13

djangoアプリがあり、その前のサーバーにVarnishをセットアップしたい。で、別のserverfaultのスレッド誰かがワニスの前にnginxのを置くことを提案しました。

キャッシングサーバーのワニスの前にNginxを配置する必要がありますか?その場合、アプリサーバーでNginxを使用する必要がありますか?

回答:


10

階層間で負荷分散を行う大規模なサーバーファームではなく、合計で1〜3台のフロントエンドサーバーについて話します。

Vanishの前にnginxを配置すると、その場でHTTP圧縮を実行できます。これはパフォーマンスのベストプラクティスですが、省くことができます。(Varnishのコンテンツは、ESI Includesが機能するように、多くの場合、圧縮されないままになります。そのため、Varyヘッダー/ブラウザーの一致に応じて、同じオブジェクトの複数のキャッシュバージョンを処理する必要はありません。)

アプリサーバー上のnginxについて-mod_wsgiを搭載したApacheは、最近の新しいDjangoインストールをデプロイするための推奨される最も一般的な方法ではありませんか?DjangoでApache / mod_wsgiよりもnginx / fastcgiを使用する説得力のある理由は知りません。ただし、Djangoの専門家からアドバイスを受ける必要があります。

nginxにはない魅力的な負荷分散機能を備えたVarnishについては、それらが何であるかわかりませんか?ワニスには、ランダムおよびラウンドロビンのバランスがあります。nginxにはラウンドロビン、クライアントIP、一貫したハッシュがあります-Varnishに大きな利点はありませんか?それはVCLかVarnishのグレースフルな設定のリロードか、それとも何か他のものですか?

小規模な1-3サーバーのセットアップの場合は、

ニス-> Apache / mod_wsgi / Django

または多分

イカ-> Apache / mod_wsgi / Django

帯域幅が高価でない限り、単純化のためにHTTP圧縮を無視します。

更新:

グラハムダンプルトンは、以下の貴重なコメントを書いています。彼は、たとえばVPSのブログや、キャッシュのない小さなWebファームの非常に一般的なセットアップについて言及しています。

nginx-> Apache / mod_wsgi / Django

これは、いくつかの理由から非常に優れたソリューションです。

  1. 簡単なセットアップ
  2. nginxは高速でオーバーヘッドが最小限であり、静的ファイルの提供とブラウザ接続のキープアライブを処理します。
  3. Djangoは、Graham Dumpletonの優れたmod_wsgi(Djangoの推奨プラットフォーム)で実行されます。

最初にこれについて言及しなかった理由は、OPが非常に高性能なキャッシュソリューションであるVarnishを必要とするように思われたためです。nginx / Apache / mod_wsgiコンボは、Varnishに匹敵するレベルのパフォーマンスと柔軟性を備えたキャッシュを実行できません。


2
多くの人がさまざまな理由で行うように、「nginx-> Apache / mod_wsgi / Django」を使用することもできます。
グラハムダンプルトン2009年

4
nginxは、多くの人が気付かないようなユースケースで提供する他のことは、nginxがApacheを遅いクライアントから隔離することです。これは、特定のサイズまでのリクエストコンテンツがnginxによってストリーミングされないためです。代わりに、リクエストヘッダーとコンテンツをバッファリングし、すべてを持っている場合にのみプロキシリクエストを行います。これは、リクエストを処理するために必要なすべての情報が利用可能になったときにのみ、Apacheに渡すことを意味します。したがって、Apache / mod_wsgiは可能な限り最短の時間ビジーになり、プロセス/スレッドは低速クライアントに拘束されません。バッファリングの測定は逆も同様に行われるため、Apacheもより速く終了できます。
グラハムダンプルトン2009年

2
@Graham Dumpleton:ここにいることはとてもうれしいです。:-)。nginx HTTP多重化/スマート接続処理に関して、私は完全に同意します。
ジェスパーM

何よりもまず、JesperとGrahamにこのような包括的な回答を書いてくれたことに感謝します。2つのアプリサーバーの前に負荷分散サーバーを配置することを計画しています。1台のサーバーがほとんどのトラフィックを処理し、2台目は主にフェイルオーバーと新機能のベータテストに使用されます。
エンリコ

Varnishは、どのリクエストがどのバックエンドに送信されるかを完全に制御できるため、魅力的です。Varnishはバックエンドサーバーのヘルスチェックも行います。フェールオーバーのセットアップは簡単で、スロー/デッドバックエンドを適切に処理します(両方のサーバーが停止した場合)。
エンリコ

4

ワニスなしでnginxを使用して、コンテンツをプロキシおよびキャッシュできます。


2
ワニスには、nginxがすぐに使える魅力的な負荷分散機能がいくつかあります
Enrico

4
たとえば、どのような機能ですか?
サイレント

4

Nginx、Varnish、およびApache / mod_wsgi / Djangoを正常に使用しています。私は次の設定から始めました:

Nginx-> Apache / mod_wsgi / Django

Apacheに大きな負荷がかかるようになったら、ワニスを追加しました。

Nginx->ワニス-> Apache / mod_wsgi / Django

Nginxを一種の「URLルーター」として使用します。Django管理リクエストは、NginxからApacheに直接送信されます。クライアントリクエストはNginxからVarnishに送信され、Apacheからのリクエストがキャッシュされ、アプリサーバーが利用できない場合はキャッシュから「猶予」されたアイテムも提供されます。

Nginxサーバーは、特定の静的コンテンツ(画像、CSS、javascriptファイルなど)を直接提供します。

一般に、パフォーマンスは優れています。言及すべきいくつかの注意事項に気付きました。

  1. 忙しいサイトでは、Varnishを再起動するとアプリサーバーの負荷が急上昇する可能性があるため、Varnishの再起動を最小限に抑えることをお勧めします。(ワニスには、VCLファイルを再読み込みするNginx / Apacheのような「リロード」機能がないようです)。逆に、Nginx構成の再読み込みによる影響は最小限です。このため、私はNginxでURLの書き換えと「ルーティング」のほとんどを行います。
  2. ワニスは、NginxとApacheの間に簡単にドロップできます。アプリサーバーの負荷が高いことに気づいたら、デフォルトの設定を使用してワニスを追加すると、実際に違いが生じる可能性があります。
  3. Varnishを使用する場合は、キャッシュの無効化をどのように処理するかを考える必要があります。
  4. 私の経験では、Varnishは失敗したバックエンドをNginxよりも少し優雅に処理します(以前に指摘したように)。

ワニスが他の何かの背後にあるのを見たことがありません。ニスは通常、URLルーターを実行するロードバランサーです。あなたは2つのWebサーバーと1つのプロキシまたは2つのプロキシと1つのWebサーバーを持っていますか?q
ioanb7

2

私はNginx-> Varnish-> uWSGI-> Djangoを使用しています

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