web-dev-qa-db-fra.com

Apache ou Nginx pour servir les applications Django?

Je souhaite déployer une application Web Django et je dois donc choisir un serveur Web pour servir les fichiers Python.

Je dois mentionner que mon site de production sera sur un seul serveur, qui hébergera la base de données et le serveur Web. Dans l’optique du moment, je souhaite déplacer la base de données sur un serveur dédié, etc.

Voici mes questions:

  1. Devrais-je utiliser un serveur Web ou deux? Le contexte de cette question est que de nombreuses personnes recommandent d’utiliser NginX pour servir des fichiers multimédias statiques et d’Apache pour servir le Python, ce qui soulève les questions suivantes:
    1. Pourquoi ne pouvons-nous pas utiliser un seul serveur? Je comprends qu'Apache puisse parfois être une bête, donc je suspecterais les gens d'utiliser NginX pour servir À LA FOIS les fichiers multimédias statiques et les fichiers python.
    2. Si vous utilisez un serveur, quoi de mieux, Apache ou NginX. J'ai de l'expérience dans Apache, mais je n'ai entendu que de bonnes choses à propos de NginX.
  2. Quels sont les avantages d'utiliser FastCGI par rapport à mod_wsgi?

Merci d'avance

40
Barry Steyn

Devrais-je utiliser un serveur Web ou deux? Le contexte de cette question est que beaucoup de gens recommandent d’utiliser NginX pour servir des fichiers multimédias statiques et Apache pour servir le Python, qui appelle les questions suivantes: Pourquoi ne pouvons-nous pas utiliser un seul serveur? Je comprends que Apache peut être une bête de temps en temps, par conséquent, je suspecterais les gens d’utiliser NginX pour servir DEUX fichiers multimédias statiques et fichiers python. 

Si aucun autre site n'est déjà configuré d'une manière ou d'une autre, ou si vous avez besoin de fonctionnalités spécifiques mutuellement exclusives entre les différents serveurs, je ne vois aucune raison d'utiliser plusieurs serveurs. Cela ajoute simplement une complexité et une configuration inutiles.

Si vous utilisez un serveur, quoi de mieux, Apache ou NginX. J'ai de l'expérience dans Apache, mais je n'ai entendu que de bonnes choses à propos de NginX.

Comme pour toutes les questions "ce qui est meilleur", il s'agit généralement d'une question de préférence. Et pour obtenir une réponse spécifique, vous devez probablement poser des questions plus spécifiques. 

Si vous avez déjà une expérience avec un serveur spécifique et que vous voulez juste vous lancer rapidement, alors je vous suggérerais d'aller avec ce que vous savez déjà pour le moment. Vous pourrez toujours passer plus tard à un autre serveur Web ..__ D'un autre côté, c'est une bonne occasion de connaître les solutions de rechange.


tl; dr: Je choisirais ce qui est plus facile à configurer et à gérer. Personnellement, je choisirais un nginx et un gunicorn, principalement parce que c'est facile et qu'il y a beaucoup de ressources disponibles si vous devez rester bloqué.

Je ne m'inquiéterais pas trop de la performance jusqu'à ce que vous ayez réellement besoin de. Tous les serveurs Web agrafés sont testés et testés, il est donc essentiel de répondre aux exigences de l'application et à la charge réelle, ce qui nécessite une surveillance, une modélisation et des tests pour un réglage de toute façon.

Quels sont les avantages d'utiliser FastCGI par rapport à mod_wsgi?

Différences et utilisations entre WSGI, CGI, FastCGI et mod_python en ce qui concerne Python?


articles à lire (certains anciens, d'autres nouveaux);

9
kalvatn

Je ne sais pas trop qui vous recommande d’utiliser Nginx et Apache, mais c’est une idée horrible. Quel que soit votre choix, l'un ou l'autre agira simplement comme proxy inverse, ne servant que des ressources statiques et transférant tout le reste à un sous-processus comme uwsgi.

Je préfère Nginx car il est léger et extrêmement rapide. Apache can est tout aussi bon, mais nécessite une construction à partir des sources et la connaissance exacte de la configuration à utiliser pour correspondre à Nginx. Cependant, Apache a plus de fonctionnalités et est un peu plus facile à utiliser. C'est vraiment à vous et aux besoins de votre application.

Cependant, quel que soit votre choix, vous n'avez besoin que de un - pas des deux.

2
Chris Pratt

Question 1) Vous pouvez utiliser un seul serveur, mais pour les médias statiques, une solution comme lighttpd ou nginx sera beaucoup plus rapide. Je resterais avec Apache si vous voulez vraiment utiliser un seul serveur, il a toute la flexibilité dont vous avez besoin et c'est le serveur Web le plus courant.

Question 2) Cela dépend de votre but. Vous pouvez trouver des informations ici: Déployer Django (fastcgi, Apache mod_wsgi, uwsgi, gunicorn)

2
marue

Je pense que les meilleurs choix sont virtualenv, uwsgi et nginx . J'ai changé tous mes serveurs maintenant et je suis vraiment satisfait des performances.

Voici un bon tutoriel sur la configuration de votre serveur Web http://senya.pl/2011/03/sexy-nginx-uwsgi-stack-for-Django-with-virtualenv/

2
nicowernli

J'ai essayé de suivre le lien suggéré par Nicowernli, mais senya.pl était en panne à ce moment-là ... Cela semble être un bon tutoriel alternatif très complet et vraiment étape par étape:

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

0
michel.iamit
  1. Le moins, le mieux.
  2. Le meilleur moyen de déployer une application Django sur Nginx est d’utiliser uwsgi . C'est purement WSGI et intégré dans la nouvelle version de Nginx.
0
risent

J'ai utilisé gunicorn + eventlet comme serveur Python et nginx comme proxy inverse avec un grand succès. Récemment, je suis passé à uWSGI et cela semble être une solution de qualité, sinon meilleure. Je n'ai pas encore essayé Apache et Django bien que j'étais un utilisateur Apache avant d'utiliser Django. Voici un bon article sur comment tout faire: http://radtek.ca/blog/Django-production-deployment-via-nginx-and-gunicorn-and-virtualenv/

0
radtek