Apache ou Nginx pour servir de Django applications?
Je souhaite déployer un Django d'application web, et donc j'ai besoin de choisir un serveur web de servir les fichiers Python.
Je tiens à préciser que mon site de production sera sur un serveur unique, qui sera l'hôte de la base de données et le serveur web. Tant que l'élan de pioches, j'ai pour but de déplacer la base de données de serveur dédié, etc.
Voici mes questions:
- Dois-je utiliser un serveur web ou deux? Le contexte de cette question est que beaucoup de gens vous recommandons d'utiliser NginX pour servir statique des fichiers multimédias et Apache pour servir le Python, qui attire les questions suivantes:
- Pourquoi ne peut-on pas utiliser un seul serveur. Je comprends Apache peut être une bête à la fois, donc je soupçonne les gens à utiliser NginX pour servir à la FOIS statique des fichiers multimédias et les fichiers python.
- Si vous utilisez un serveur, ce qui est mieux, Apache ou NginX. Je suis expérimenté dans Apache, mais je n'ai entendu que de bonnes choses à propos de NginX.
- Quels sont les avantages à utiliser FastCGI, par opposition à mod_wsgi?
Merci beaucoup à l'avance
- Dans mon expérience, Apache avec mod_wsgi vient avec beaucoup moins de maux de tête.
- Qu'avez-vous de faire? Il semble Django docs vous suggérons d'utiliser Nginx comme le premier choix pour la statique des médias et Apache comme le premier choix pour Django apps.
Vous devez vous connecter pour publier un commentaire.
Si vous n'avez pas d'autres sites qui sont déjà configurées d'une manière ou d'une autre, ou vous avez besoin de certaines fonctionnalités spécifiques qui sont mutuellement exclusives entre les différents serveurs, je ne vois aucune raison pour l'utilisation de plusieurs serveurs. Cela ajoute juste une complexité inutile et de configuration.
Comme avec tous les "ce qui est mieux" questions c'est généralement une question de préférence. Et pour obtenir une réponse spécifique, vous aurez probablement besoin de poser des questions plus spécifiques.
Si vous avez déjà une expérience avec un serveur spécifique et vous voulez juste pour obtenir un rapidement, alors je suggère d'aller avec ce que vous connaissez déjà pour le moment. Vous pouvez toujours passer à un autre serveur web plus tard.
D'autre part c'est une bonne occasion d'en apprendre davantage sur les solutions de rechange.
tl;dr : je pencherais pour ce qui est plus facile à configurer et à gérer. Personnellement, je pencherais pour un nginx et gunicorn, principalement parce que c'est facile et il ya beaucoup de ressources disponibles si vous devriez obtenir coincé.
Je ne serais pas trop se soucier de la performance jusqu'à ce que vous réellement besoin de. Tout aliment de base des serveurs web sont essayé et testé de sorte qu'il s'agit essentiellement vers le bas pour les besoins de l'application et de la charge réelle, qui a besoin de surveillance et de modélisation et de test pour le réglage fin, de toute façon.
Les différences et les utilise entre WSGI, CGI, FastCGI, et mod_python en ce qui concerne Python?
des articles pour les lire (certains vieux, quelques nouvelles);
Question 1) Vous pouvez utiliser un seul serveur, mais pour servir statique médias une solution comme lighttpd ou nginx sera beaucoup plus rapide. Je m'en tiendrais à Apache si vous voulez vraiment utiliser un seul serveur, il a toute la souplesse dont vous avez besoin et il est le plus fréquent serveur.
La Question 2) Dépend de votre but. Vous pouvez trouver des infos ici: Le déploiement de Django (fastcgi, apache mod_wsgi, uwsgi, gunicorn)
Je ne suis pas sûr de qui est en vous recommandant que vous utilisez à la fois Nginx et Apache, mais c'est une idée horrible. Quel que soit votre choix, soit tout simplement agir comme un proxy inverse, ne servant que les ressources statiques et en remettant tout le reste à un sous-processus comme uwsgi.
Je préfère Nginx parce que c'est léger et extrêmement rapide de la boîte. Apache peut être d'aussi bonne qualité, mais nécessite la mise en place de la source et de savoir exactement ce que la configuration à utiliser pour correspondre à Nginx. Cependant, Apache a plus de fonctionnalités et est un peu plus facile de travailler avec. C'est vraiment à vous et les besoins de votre application.
Cependant, quel que soit votre choix, vous avez seulement besoin un -- pas les deux.
Je pense que le meilleur choix est virtualenv, uwsgi et de nginx.
J'ai changé tous mes serveurs maintenant et je suis vraiment heureux avec la performance.
Voici un bon tutoriel sur comment vous installer serveur
http://senya.pl/2011/03/sexy-nginx-uwsgi-stack-for-django-with-virtualenv/
J'ai essayé de suivre le lien proposé par Nicowernli, mais senya.pl a été vers le bas à ce moment.
Cela semble être une bonne alternative tutoriel....
Va l'essayer, il suffit de lire les 2 premiers chapitres, mais semble très complète 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/
J'ai utilisé gunicorn + eventlet que le Python serveur, et nginx comme le reverse proxy avec grand succès. Récemment je suis passé à uWSGI et il semble être tout aussi bien d'une solution si ce n'est mieux. Je n'ai pas encore essayer apache et Django bien que j'ai été un utilisateur apache avant d'utiliser Django. Voici un bon d'écrire sur l'obtention de tout faire: http://radtek.ca/blog/django-production-deployment-via-nginx-and-gunicorn-and-virtualenv/