Ich habe eine Django-App, die lokal mit der Standard-Entwicklungsumgebung ausgeführt werden kann. Ich möchte dies jetzt für die Produktion auf EC2 verschieben. In der Django-Dokumentation wird vorgeschlagen, mit apache und mod_wsgi zu arbeiten und nginx zum Laden statischer Dateien zu verwenden.
Ich verwende Ubuntu 12.04 auf einer Ec2-Box. Meine Django-App "ddt" enthält ein Unterverzeichnis "apache" mit 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()
Ich habe mod_wsgi von Apt installiert. Meine Apache / httpd.conf enthält
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>
Unter Apache2 / Sites aktiviert
<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>
Wenn ich richtig liege , sollten diese drei Dateien es meiner Django-App ermöglichen, auf Port 8080 ausgeführt zu werden .
Ich habe die folgende Datei nginx / proxy.conf
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;
Unter nginx / sites-enabled
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/;
}
}
Wenn ich richtig bin, sollten diese beiden Dateien Nginx so einrichten, dass sie Anfragen auf dem HTTP-Port 80 entgegennehmen, aber dann Anfragen an Apache richten, auf dem die Django-App auf Port 8080 ausgeführt wird. Wenn ich zu mysite.com gehe, sehe ich nur Willkommen bei Nginx !
Irgendwelche Ratschläge zum Debuggen?
quelle
Antworten:
Bitte beachten Sie, dass Sie in Ihren Anfragen www.mysite.com oder mysite.com verwenden sollten (wie in der Konfigurationsdatei definiert):
Aber es sieht so aus, als würden Sie die Site über den Localhost oder über die IP-Adresse anfordern
quelle
Stellen Sie zunächst sicher, dass Sie unter 127.0.0.1:8080 auf Ihre Anwendung zugreifen können und posten Sie den Inhalt von nginx_error.log. Versuchen Sie Kopieren Einfügen nach Nginx Conf-Datei und überprüfen Sie, ob es funktioniert. Ich verwende dieselbe Konfiguration für meine Python-Anwendung.
quelle
In Ihrer NGINX-Konfiguration haben Sie den Pfad zur conf-Datei (
/etc/nginx/proxy.conf
) in a eingefügtlocation
. Ich glaube, dass es draußen gehört .quelle
Erstens, bitte verwenden Sie aus Liebe zu allem, was heilig ist, nicht Nginx und httpd. Dies wird ein Ärgernis für das Debuggen sein.
Zweitens habe ich nirgendwo in den Dokumenten gesehen, dass sie diese Art der Einrichtung empfehlen.
Verwenden Sie Apache oder Nginx, dies wird die Hälfte Ihrer Probleme beseitigen.
Überprüfen Sie auch Ihre nginx.conf, wenn sie keine Dateien aus anderen Verzeichnissen enthält, die möglicherweise einen globalen vhost haben, der Ihren überschreibt.
Sie sollten Ihren Beitrag auch bearbeiten, um die Domain in Apache Config in der Nähe der WSGI-Parameter zu entfernen, da Sie gerade ein Leck in Ihrem Produktions-Setup haben.
Entfernen Sie andere Websites von Websites, die aktiviert sind.
quelle