Djangoアプリケーションをデプロイするときに、nginxをuWGSIと連携するように構成する方法に関するチュートリアルが多数あります。
しかし、なぜこのキットにnginxが必要なのですか?uWSGI自体はWSGI Pythonアプリケーションを提供でき、静的ファイルを提供でき、SSLも実行できます。nginxはuWSGIではできないことを何ができるのでしょうか?
Djangoアプリケーションをデプロイするときに、nginxをuWGSIと連携するように構成する方法に関するチュートリアルが多数あります。
しかし、なぜこのキットにnginxが必要なのですか?uWSGI自体はWSGI Pythonアプリケーションを提供でき、静的ファイルを提供でき、SSLも実行できます。nginxはuWSGIではできないことを何ができるのでしょうか?
回答:
あなたはしません。
とにかくそれは簡単な答えです-あなたはそれを必要としません。uWSGIはそれ自体が有能なサーバーです。
ただし、nginxのような他のサーバーはより長く、(おそらく、とにかく)より安全であり、uWSGIでサポートされていない追加機能(たとえば、ExpiresまたはE-Tagの組み合わせによる静的リソースの処理の改善)サーバーとネットワークの負荷を大幅に削減できるヘッダー、gzip圧縮、事前圧縮されたgzipなど)。さらに、Djangoアプリケーションの前にあるnginxなどのサーバーは、動的コンテンツのキャッシングも実装できます。これにより、サーバーの負荷をさらに軽減し、CDNの使用を促進することもできます(通常、動的コンテンツではうまくいきません) )。さらに進んで、nginxを完全に別のサーバーに配置し、静的コンテンツ自体を処理しながら、負荷分散されたアプリケーションサーバーのクラスターに動的コンテンツの要求をリバースプロキシすることもできます。
たとえば、私のブログ(WordPressの前にnginxがあります)は、投稿を24時間キャッシュし、インデックスページを5分間キャッシュするように調整されています。ほとんどの時間を本当に必要とするほどトラフィックが足りない間、それは私の小さなVPSが時折急増するのを防ぐのに役立ちます-記事の1つが選ばれたときのトラフィックの急増など数千人のフォロワーがいるツイッターがアップし、その多くが数千人のフォロワーにそれをリツイートしました。
「裸の」uWSGIサーバーを実行していた場合(そして、WordPressではなくDjangoサイトであったと仮定すると)、それはうまく立ち上がったかもしれません-クラッシュして燃えたかもしれません。 。その負荷を処理するためにnginxをその前に置くと、本当に役立ちます。
そうは言っても、多くのトラフィックが表示されない小さなサイトを実行している場合は、nginxやその他のものは実際に必要ありません。一方、大量のトラフィックが表示される場合は...まあ、まだ uWSGIが必要かもしれませんが、少なくともその前に何かを考えて負荷を軽減する必要があります。実際、完成したサイトでさまざまな構成の負荷テストを実際に行い、予想される負荷の下で最適なものを判断し、最終的には何でも使用する必要があります。
IMO、あなたのウェブサイトをラボではなくインターネットに置くと、違いが見えるかもしれません。
ネットワーク速度が遅い他の国のユーザーがWebブラウザーを開いてWebサイトにアクセスすることを想像してください。uWSGIは、そのHttp接続をスレッドで処理します。そのスレッドは、ネットワーク速度が遅いため、完全なHttp要求を待機するのにかなり長い時間を費やす可能性があります。スレッドプールのサイズが100の場合、100人のユーザーがそのように遅いと想像してください。どうなりますか?他のHttp要求を処理するアイドルスレッドはありません。
しかし、Nginxの場合はまったく異なります。Nginxは「Reactor Pattern」で設計されています。「Reactor Pattern」をグーグルで検索して、動作を確認できます。要するに、低速接続は、他のHttp要求を処理するのに影響しません。