質問: Web開発を Django でおこなう際、大抵の情報には、いわゆるWebサーバの Apache や nginx の上で Django を動かす構成になっています。 しかし、Djangoはそれ自体がWebサーバであり、わざわざ Apache や nginx を使用する理由がわかりません。 ものによっては、Django は「アプリケーションサーバ」であるので、その下に「Webサーバ」が必要であるというようなことも書いてありますが、しかし、Django のプロセスが動いていれば特に必要ないように思います。 Django のチュートリアルをなぞると、特にWebサーバのサービスを別に走らせたりせずに直接HTTP通信ができています。 これらは Django に限った話ではないのかもしれませんが、初学者ゆえに背景がわからず混乱しています。 Apache/nginx はなぜ必要なのでしょうか? Django のみでWebサービスをホストしてはいけないのでしょうか?
回答: Djangoに限らず、一般的にはアプリケーションサーバを直接公開せず、Apache や nginx などのWebサーバを介して公開します。 これはアプリケーションサーバではCPU・メモリ効率が悪いため、画像・スタイルシート・スクリプトファイルなどの静的なファイル高速なウェブサーバに任せるため、というのが大きな理由です。 その他、アクセス制御などのインフラ周りの処理はアプリケーション側ではなくWebサーバに持たせたい、複数のアプリケーションサーバを利用する場合にも柔軟に対応出来る、Webサーバが持つ高機能な仕組みを利用したい (アプリケーションサーバはWebサーバとして低機能なことが多い) などの理由もあります。