web-dev-qa-db-ja.com

Nginx Varnish Nginx Django?

Djangoアプリがあり、その前のサーバーでVarnishをセットアップしたいのですが、 another serverfault thread では、NginxをVarnishの前に置くことを提案されました。

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

13
Enrico

合計で1〜3台のフロントエンドサーバーを対象としており、階層間の負荷分散を行う大規模なサーバーファームではありませんか?

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

アプリサーバーのnginxについて-is Apache with mod_wsgi は、現在推奨されていない新しい展開方法の最も一般的な方法Django現在のインストールですか? DjangoのApache/mod_wsgiではなくnginx/fastcgiを使用する理由ですが、Djangoの専門家からアドバイスを受ける必要があります。

Varnishにnginxにはない魅力的なロードバランシング機能があることに関して、私はそれらが何であるかわかりませんか?ワニスには、ランダムとラウンドロビンのバランスがあります。 nginxには、ラウンドロビン、クライアントIP、および一貫性のあるハッシュがあります-Varnishに大きなメリットはないと思いますか?それはVCLまたはVarnishの優雅な設定の再読み込みですか、それとも何か他のものですか?

小さな1〜3のサーバー設定の場合、私はただ行うと思います

ワニス-> Apache/mod_wsgi/Django

または多分

イカ-> Apache/mod_wsgi/Django

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

更新:

Graham Dumpletonが以下に貴重なコメントを書いています。彼は非常に一般的な設定、たとえばVPS上のブログ、またはキャッシュなしの小さなWebファームについて言及しています。

nginx-> Apache/mod_wsgi/Django

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

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

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

10
Jesper M

ワニスなしでnginxを使用して、コンテンツのプロキシとキャッシュを行うことができます。

4
silent

Nginx、Varnish、Apache/mod_wsgi/Djangoをうまく使用しています。私は次の設定から始めました:

 Nginx-> Apache/mod_wsgi/Django 

Apacheにかなりの負荷がかかり始めたら、Varnishを追加しました。

 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. VarnishはNginxとApacheの間で簡単にドロップできます。アプリサーバーの負荷が高いことに気づき始めた場合は、デフォルトの構成でワニスを追加するだけでも大きな違いが生まれます。
  3. Varnishを使用する場合は、キャッシュの無効化をどのように処理するかについて必ず考える必要があります。
  4. 私の経験では、Varnishは失敗したバックエンドをNginxより少し優雅に処理します(以前に指摘したとおり)。
4
David Narayan

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

2
MechanisM