J'ai une application django qui peut s'exécuter localement en utilisant l'environnement de développement standard. Je veux maintenant déplacer cela vers EC2 pour la production. La documentation de django suggère d'exécuter avec apache et mod_wsgi, et d'utiliser nginx pour charger des fichiers statiques.
J'utilise Ubuntu 12.04 sur une box Ec2. Mon application Django, "ddt", contient un sous-répertoire "apache" avec ddt.wsgi
import os, sys
apache_configuration= os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append('/usr/lib/python2.7/site-packages/django/')
sys.path.append('/home/jeffrey/www/ddt/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'ddt.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
J'ai installé mod_wsgi depuis apt. Mon apache / httpd.conf contient
NameVirtualHost *:8080
WSGIScriptAlias / /home/jeffrey/www/ddt/apache/ddt.wsgi
WSGIPythonPath /home/jeffrey/www/ddt
<Directory /home/jeffrey/www/ddt/apache/>
<Files ddt.wsgi>
Order deny,allow
Allow from all
</Files>
</Directory>
Sous apache2 / compatible avec les sites
<VirtualHost *:8080>
ServerName www.mysite.com
ServerAlias mysite.com
<Directory /home/jeffrey/www/ddt/apache/>
Order deny,allow
Allow from all
</Directory>
LogLevel warn
ErrorLog /home/jeffrey/www/ddt/logs/apache_error.log
CustomLog /home/jeffrey/www/ddt/logs/apache_access.log combined
WSGIDaemonProcess datadriventrading.com user=www-data group=www-data threads=25
WSGIProcessGroup datadriventrading.com
WSGIScriptAlias / /home/jeffrey/www/ddt/apache/ddt.wsgi
</VirtualHost>
Si j'ai raison, ces 3 fichiers ci-dessus devraient permettre correctement à mon application django de s'exécuter sur le port 8080 .
J'ai le fichier nginx / proxy.conf suivant
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
Sous nginx / compatible avec les sites
server {
listen 80;
server_name www.mysite.com mysite.com;
access_log /home/jeffrey/www/ddt/logs/nginx_access.log;
error_log /home/jeffrey/www/ddt/logs/nginx_error.log;
location / {
proxy_pass http://127.0.0.1:8080;
include /etc/nginx/proxy.conf;
}
location /media/ {
root /home/jeffrey/www/ddt/;
}
}
Si je me trompe, ces deux fichiers devraient configurer nginx pour prendre les requêtes sur le port HTTP 80, mais diriger les requêtes vers apache qui exécute l'application django sur le port 8080. Si je vais sur mysite.com, tout ce que je vois c'est Bienvenue dans Nginx !
Des conseils sur la façon de déboguer cela?
la source
Réponses:
veuillez noter que vous devez utiliser www.mysite.com ou mysite.com dans vos demandes (comme défini dans le fichier de configuration):
mais ressemble, vous demandez le site par localhost ou par adresse IP
la source
Tout d'abord, assurez-vous que vous pouvez accéder à votre application sur 127.0.0.1:8080 et veuillez publier le contenu de nginx_error.log. Essayez de copier-coller après le fichier de conf nginx et vérifiez qu'il fonctionne. J'utilise la même configuration pour mon application python.
la source
Dans votre configuration NGINX, vous avez inclus le chemin d'accès au fichier conf (
/etc/nginx/proxy.conf
) dans alocation
. Je crois qu'il appartient à l' extérieur .la source
Tout d'abord, s'il vous plaît pour l'amour de tout ce qui est saint, n'utilisez pas à la fois nginx et httpd. Cela va être pénible à déboguer.
Deuxièmement, nulle part dans la documentation, je n'ai vu qu'ils recommandaient ce type de configuration.
Utilisez apache ou nginx, cela éliminera la moitié de vos problèmes.
Vérifiez également votre nginx.conf s'il n'inclut pas de fichiers provenant d'autres répertoires, qui pourraient avoir un vhost global qui remplace le vôtre.
Vous devez également modifier votre publication pour supprimer le domaine dans la configuration apache près des paramètres WSGI, car vous perdez actuellement votre configuration de production.
Supprimez les autres sites des sites activés.
la source