Implementación de la aplicación Django con Nginx, Apache, mod_wsgi

12

Tengo una aplicación django que puede ejecutarse localmente utilizando el entorno de desarrollo estándar. Ahora quiero mover esto a EC2 para producción. La documentación de django sugiere ejecutar con apache y mod_wsgi, y usar nginx para cargar archivos estáticos.

Estoy ejecutando Ubuntu 12.04 en una caja Ec2. Mi aplicación Django, "ddt", contiene un subdirectorio "apache" con 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()

Tengo mod_wsgi instalado desde apt. Mi apache / httpd.conf contiene

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>

En apache2 / sites-enabled

<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 estoy en lo correcto, estos 3 archivos anteriores deberían permitir que mi aplicación django se ejecute correctamente en el puerto 8080 .

Tengo el siguiente archivo 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;

En 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/;
  }
}      

Si estoy en lo correcto, estos dos archivos deberían configurar nginx para recibir solicitudes en el puerto HTTP 80, pero luego dirigir las solicitudes a apache que ejecuta la aplicación django en el puerto 8080. Si voy a mysite.com, todo lo que veo es Bienvenido a Nginx !

¿Algún consejo sobre cómo depurar esto?

JCWong
fuente
¿Podría publicar su archivo nginx.conf? hay algún problema con nginx que no habilita su host, tal vez la línea de inclusión es como include /etc/nginx/conf.d/*.conf; y su archivo de configuración no es .conf. De cualquier forma, si ve la página de bienvenida de nginx, significa que su configuración no se aplica.
Andrei Mikhaltsov
Para futuros usuarios, debo mencionar que con el advenimiento de mod_wsgi-express, no necesitamos hacer ninguna configuración de Apache, ni definiciones de VirtualHost, nada en las carpetas conf y sitios. Todo está hecho de manera optimizada por mod_wsgi-express automáticamente. Vea las publicaciones del blog de Graham para más detalles
Anupam,

Respuestas:

1

tenga en cuenta que debe usar www.mysite.com o mysite.com en sus solicitudes (como se define en el archivo de configuración):

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

pero parece que estás solicitando el sitio por localhost o por dirección IP

sergres
fuente
0

En primer lugar, asegúrese de poder acceder a su aplicación en 127.0.0.1:8080 y publique el contenido de nginx_error.log. Intente copiar y pegar siguiendo el archivo nginx conf y verifique que esté funcionando. Estoy usando la misma configuración para mi aplicación python.

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
fuente
0

En su configuración NGINX, ha incluido la ruta al archivo conf ( /etc/nginx/proxy.conf) dentro de a location. Creo que pertenece afuera .

Dan Dye
fuente
0

En primer lugar, por amor a todo lo que es sagrado, no use nginx y httpd. Esto va a ser un fastidio para depurar.

En segundo lugar, en ninguna parte de los documentos he visto que recomiendan este tipo de configuración.

Use apache o nginx, esto eliminará la mitad de sus problemas.

También revise su nginx.conf si no incluye archivos de otros directorios, que podrían tener un vhost global que anula el suyo.

También debe editar su publicación para eliminar el dominio en la configuración de apache cerca de los parámetros de WSGI, ya que actualmente está filtrando su configuración de producción.

Eliminar otros sitios de sitios habilitados.

Gothrek
fuente