多くのDjango AmazonのEC2を介したアプリのデプロイでは、HTTPサーバーNGINXとGunicornを使用します。
彼らが実際に何をしているのか、そしてなぜ両方が並行して使用されているのか疑問に思いました。両方を並行して実行する目的は何ですか?
それらは並行して使用されません。 NGINXはリバースプロキシです。それは最初の列です。着信接続を受け入れ、次にどこに行くべきかを決定します。また、(通常は)CSS、JS、画像などの静的メディアも提供します。また、SSLを介した暗号化、キャッシュなどの他のことも実行できます。
Gunicornは次のレイヤーであり、アプリケーションサーバーです。 NGINXは、着信接続がwww.domain.com
用であることを確認し、その接続をGunicornに渡す必要があることを(構成ファイルを介して)認識します。 Gunicornは [〜#〜] wsgi [〜#〜] サーバーであり、基本的には次のとおりです。
webサーバーとWebアプリケーションまたはフレームワーク間のシンプルでユニバーサルなインターフェース
Gunicornの仕事は、Djangoインスタンスを管理および実行することです(開発中にDjango-admin runserver
を使用するのと同様)
この設定とは対照的に、mod_wsgi
モジュールでApacheを使用します。この状況では、アプリケーションサーバーは実際にはApacheの一部であり、モジュールとして実行されます。
NginxとGunicornは並列では使用されません。
次の図は、nginxとGunicornがどのように相互作用するかを示しています。