Bereitstellen der Django-App mit Nginx, Apache, mod_wsgi

12

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?

JCWong
quelle
Könnten Sie bitte Ihre nginx.conf-Datei posten? Es gibt ein Problem damit, dass nginx Ihren Host nicht aktiviert. Vielleicht ist include line wie include /etc/nginx/conf.d/*.conf; und deine config datei ist nicht .conf. Wenn Sie die Willkommensseite von nginx sehen, bedeutet dies, dass Ihre Konfiguration nicht angewendet wird.
Andrei Mikhaltsov
Für zukünftige Benutzer sollte ich erwähnen, dass wir mit dem Aufkommen von mod_wsgi-express keine Apache-Konfiguration, keine VirtualHost-Definitionen, nichts in conf- und sites-Ordnern vornehmen müssen. Das alles wird von mod_wsgi-express auf eine gut optimierte Art und Weise automatisch erledigt. Siehe Grahams Blog-Beiträge für Details
Anupam

Antworten:

1

Bitte beachten Sie, dass Sie in Ihren Anfragen www.mysite.com oder mysite.com verwenden sollten (wie in der Konfigurationsdatei definiert):

server {
  listen 80;
  server_name www.mysite.com mysite.com;

Aber es sieht so aus, als würden Sie die Site über den Localhost oder über die IP-Adresse anfordern

sergres
quelle
0

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.

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";


    ##
    # Virtual Host Configs
    ##

    server {
        listen 80;

        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://127.0.0.1:8080;
        }

    location /static {
        root /home/ubuntu/www/myproject/webapp;
    }

    }


    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

}
yogesh.panchal
quelle
0

In Ihrer NGINX-Konfiguration haben Sie den Pfad zur conf-Datei ( /etc/nginx/proxy.conf) in a eingefügt location. Ich glaube, dass es draußen gehört .

Dan Dye
quelle
0

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.

Gothrek
quelle