Pythonでは、アプリケーション(DjangoなどのWebフレームワークで作成)とWebサーバー(Nginx・Apacheなど)のインターフェースとして、WSGI(Web Server Gateway Interface)(ウィズギー)という仕様が広く利用されています。
※特にNginxを使用する場合は、Gunicornの使用を強く推奨されています。
Djangoにも標準でWSGIに準拠したwsgirefというサーバーが実装されていますが、上記理由からGunicornを利用します。
DjangoなどのWebフレームワークはWSGIの仕様に準拠しているため、Gunicornなどの導入も容易に設定することができます。
Gunicorn公式サイト:https://gunicorn.org/
ところで、アプリケーションとWebサーバーの『インターフェース』とは、何のことを指しているのでしょうか。
Javaでは「サーブレット」APIを使用するとWebアプリケーションフレームワーク内で記述されたアプリケーションを任意のWebサーバーで実行できます。
しかしPythonではフレームワークの選択をWebサーバーの選択から分離し、ユーザーが自分に合ったペアリングを選択できるようになっているためシンプルでユニバーサルなインターフェースが必要となります。
そのインターフェースをWSGI仕様と呼び、Webサーバーとアプリケーション間で実装する必要があります。
WSGIにも様々なインターフェースの種類があり、Gunicorn以外にも「uWSGI」や「mod_python」、「PyISAPIe」などがあります。
広く用いられているuWSGIとGunicornの違いについて簡単に見てみましょう。