ApacheやNginxはDjangoアプリケーションを提供していますか?

私はDjango Webアプリケーションを配備したいので、Pythonファイルを提供するためにWebサーバーを選択する必要があります。

私の生産サイトは、データベースとWebサーバーをホストする単一のサーバー上にあることに言及する必要があります。勢いが増すにつれて、データベースを専用サーバーなどに移動することを目指します。

ここに私の質問があります:

  1. Should I use one web server or two? The context of this question is that lots of people recommend using NginX to serve static media files and Apache to serve the Python, which beckons the following questions:
    1. Why can't we use just one server. I understand Apache may be a beast at times, therefore I would suspect people to use NginX to serve BOTH static media files and python files.
    2. If using one server, what is better, Apache or NginX. I am experienced in Apache, but I have heard only good things about NginX.
  2. What are the advantages to using FastCGI as opposed to mod_wsgi?

事前に多くの感謝

38
@バリー何をやったの?それはDjangoのドキュメントがNginxを主要な選択肢として使用することを示唆しているようですDjangoアプリの主な選択肢として静的なメディアとApache用です。
追加された 著者 Anupam,
私の経験では、mod_wsgiを使用したApacheには頭痛がはるかに少なくなっています。
追加された 著者 nullability,

7 答え

1つまたは複数のWebサーバーを使用する必要がありますか?この質問の文脈は次のとおりです。   多くの人々がNginXを使って静的なメディアファイルを提供することを推奨しています   ApacheがPythonを提供するためには、以下の質問が必要です。   なぜ1つのサーバーしか使用できないのでしょうか。私はApacheが獣であるかもしれないと理解しています   したがって、私は両方の人にNginXを使って   静的なメディアファイルとpythonファイル。

現在、他のサイトがすでに設定されていない場合や、さまざまなサーバー間で相互に排他的な機能が必要な場合は、複数のサーバーを使用する必要はありません。これは不必要な複雑さと構成を追加するだけです。

1台のサーバーを使用している場合は、ApacheまたはNginXの方が良いでしょう。   私はApacheで経験がありますが、NginXについては良いことしか聞いていません。

「より良い」質問すべてと同様に、これは通常は好みの問題です。特定の回答を得るには、おそらくより具体的な質問をする必要があります。

特定のサーバーですでに経験があり、すぐに実行を開始したい場合は、当分の間あなたが既に知っているものと一緒に行くことをお勧めします。後でいつでも別のWebサーバーに切り替えることができます。 一方、代替案について学ぶ良い機会です。


tl;dr : I would go for what is easier to configure and manage. Personally I would go for a nginx and gunicorn, mainly because it's easy and there are plenty of resources available if you should get stuck.

実際にする必要があるまでは、パフォーマンスについてあまり心配する必要はありません。すべてのステープルWebサーバーは試行されテストされているため、ほとんどの場合アプリケーションと実際の負荷の要件になります。監視とモデリングとテストが必要です。

mod_wsgiではなくFastCGIを使用する利点は何ですか?

の相違点と用途Pythonに関するWSGI、CGI、FastCGI、mod_python?


articles to read (some old, some new);

9
追加された

Nginx Apacheの両方を使用することを誰に勧めるのかは分かりませんが、それはひどい考えです。どちらを選択するかはどちらか一方が単純にリバースプロキシとして機能し、静的リソースのみを処理し、他のすべてをuwsgiなどのサブプロセスに渡します。

私はそれが軽量で箱から非常に速いので、Nginxを好む。 Apacheはできますだけでなく、ソースから構築し、Nginxにマッチさせるためにどのような設定を使用するかを正確に知る必要があります。しかし、Apacheにはより多くの機能があり、やりやすくなっています。それはあなたとあなたのアプリケーションのニーズによって決まります。

しかし、どちらを選んでも、 1つだけ必要で、両方ではありません。

2
追加された
@ChrisPrattあなたはDjangoの最新バージョンでそれがまだ当てはまると思いますか?私はドキュメントを読んでいました。彼らは静的なメディアのための別のサーバーをお勧めしているようだ。
追加された 著者 Anupam,
うーん...本当にそうです。既にnginxを実行している場合、Djangoに必要なのはuwsgiのようなものです.uwsgiはApacheよりも一日のうちに速くて軽量です。リバースプロキシとして動作する別のサーバを既に持っている場合、Apacheインスタンス全体を実行させるのは正当な理由ではありません。
追加された 著者 Chris Pratt,
Apache/mod_wsgiのフロントエンドとしてnginxを使用することは、動的Python Webアプリケーションの実行時にApacheのパフォーマンスを向上させ、リソースをより少なくすることができるため、実際にはさまざまな利点があります。それは間違いなく「恐ろしいアイデア」ではありません。
追加された 著者 Graham Dumpleton,
あなたはそれを言うには勇敢です。 uWSGIの作者でさえ、その主張をしていません。彼らは、ApacheがPython用に適切に設定されている場合、大きな違いはないことを知っています。その違いは、Pythonの太ったWebアプリケーションを上に置いた場合にさほど目立ちません。最もよく調整されたPython Webアプリケーションが10秒間のオーダーの応答で実行されると考えると、Webサーバーレイヤーで要求あたり1マイクロ秒で保存されます。あなたが本当にそれの構成を台無しにしない限り、何かが遅くなる理由はWebサーバーに起因するものではありません。
追加された 著者 Graham Dumpleton,

私は最良の選択肢はvirtualenv、uwsgi、nginxだと思う。 私は今すべてのサーバーを変更して、パフォーマンスには本当に満足しています。

Here is good tutorial on how to setup you webserver http://senya.pl/2011/03/sexy-nginx-uwsgi-stack-for-django-with-virtualenv/

2
追加された
senya.plへのリンクは機能していません、一時的または永続的ですか?
追加された 著者 michel.iamit,
こんにちは。チュートリアルへのリンクありがとう。このチュートリアルのこの著者についての質問は、パッケージマネージャーからバイナリーパッケージを取得するのではなく、ソースからすべてのものをコンパイルすることを主張しています(例えば、DJangoとNginXはすべてダウンロードされ、ソースからコンパイルされます)。
追加された 著者 Barry Steyn,
皮肉なことに、私は今スペインにいる(パンプローナ)。私はあなたが南米人かも知っていますが、あなたがスペイン語でNavaraに拠点を置く機会を逃して、cervezaが私の上にいるのです。なぜあなたは適性よりもピップが好きですか?
追加された 著者 Barry Steyn,
実際に私はピップを使用することをお勧めします。 ubuntu/debianを使用している場合は、nginxリポジトリをaptソースリストに追加し、リポジトリからnginxをインストールし、pipを使用してvirtualenv、uwsgi、およびDjangoをインストールします。私はこれのためのチュートリアルを書いたが、スペイン語である
追加された 著者 nicowernli,
ええ、イム南米、実際にアルゼンチンから。私のブログエントリーはリンクです。私はあなたがいつもパッケージの最新の安定したバージョンを取得するので、より多くのピックが好きです。
追加された 著者 nicowernli,

質問1)サーバーは1つしか使用できませんが、静的メディアを提供するためにlighttpdやnginxのようなソリューションはずっと高速になります。本当に1つのサーバだけを使いたいなら、私はApacheに固執します。必要な柔軟性を備えており、最も一般的なWebサーバです。

Question 2) Depends on your purpose. You can find info here: Deploying Django (fastcgi, apache mod_wsgi, uwsgi, gunicorn)

2
追加された
こんにちは。なぜNginXをPythonのサービスにも使うことができないのです - つまり、NginXが静的ファイルに適しているのなら、確かにPthonファイルにも良いでしょう。
追加された 著者 Barry Steyn,
それは使用することができます。 Apacheが普及しているので、特別な要求に遭遇した場合、成熟したソリューションが見つかる可能性が高くなります。一方で、クリス・プラッツの答えも考慮に入れる必要があります。
追加された 著者 marue,

私はNicowernliの提案されたリンクに従おうとしましたが、senya.plはその時点でダウンしていました。 これは良い代替チュートリアルのように思えます.... それを試してみよう、ちょうど最初の2章を読むが、非常に完全で実際には一歩一歩のようだ:

http://www.abidibo.net/blog/2012/04/30/deploy-django-applications-nginx-uwsgi-virtualenv-south-git-and-fabric-part-1/

0
追加された

I have used gunicorn + eventlet as the Python server, and nginx as the reverse proxy with great success. Recently I switched to uWSGI and it seems to be just as good of a solution if not better. I have yet to try apache and Django although I was an apache user prior to using Django. Here is a good write up on getting it all done: http://radtek.ca/blog/django-production-deployment-via-nginx-and-gunicorn-and-virtualenv/

0
追加された
  1. 少なくてもよいでしょう。
  2. DjangoアプリケーションをNginxに配備する最も良い方法は、 uwsgi を使用することです。純粋なWSGIであり、新しいバージョンのNginxでサポートされています。
0
追加された