Implantando o Django App com Nginx, Apache, mod_wsgi

12

Eu tenho um aplicativo django que pode ser executado localmente usando o ambiente de desenvolvimento padrão. Agora quero passar isso para o EC2 para produção. A documentação do django sugere rodar com apache e mod_wsgi e usar o nginx para carregar arquivos estáticos.

Estou executando o Ubuntu 12.04 em uma caixa Ec2. Meu aplicativo Django, "ddt", contém um subdiretório "apache" com 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()

Eu tenho o mod_wsgi instalado no apt. Meu apache / httpd.conf contém

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>

Em 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>

Se estiver correto, esses 3 arquivos acima deverão permitir corretamente que meu aplicativo django seja executado na porta 8080 .

Eu tenho o seguinte arquivo 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;

Em nginx / ativado por 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/;
  }
}      

Se eu estiver correto, esses dois arquivos deverão configurar o nginx para receber solicitações na porta HTTP 80, mas, em seguida, direcionar solicitações para o apache que está executando o aplicativo django na porta 8080. Se eu for para mysite.com, tudo o que vejo é Bem-vindo ao Nginx !

Algum conselho sobre como depurar isso?

JCWong
fonte
Você poderia postar seu arquivo nginx.conf? existe algum problema com o nginx não habilitando seu host, talvez a linha de inclusão seja como include /etc/nginx/conf.d/*.conf; e seu arquivo de configuração não é .conf. De qualquer forma, se você vir a página de boas-vindas do nginx, sua configuração não será aplicada.
Andrei Mikhaltsov 17/10/12
Para usuários futuros, devo mencionar que, com o advento do mod_wsgi-express, não precisamos fazer nenhuma configuração do Apache, nenhuma definição do VirtualHost, nada nas pastas conf e sites. Tudo é feito de maneira otimizada pelo mod_wsgi-express automaticamente. Veja as postagens no blog de Graham para obter detalhes
Anupam

Respostas:

1

observe que você deve usar www.mysite.com ou mysite.com em suas solicitações (conforme definido no arquivo de configuração):

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

mas parece: Você está solicitando site por host local ou por endereço IP

sergres
fonte
0

Antes de tudo, verifique se você pode acessar seu aplicativo em 127.0.0.1:8080 e publique o conteúdo de nginx_error.log. Tente Copiar e colar após o arquivo conf nginx e verifique se está funcionando. Estou usando a mesma configuração para o meu aplicativo 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
fonte
0

Na sua configuração do NGINX, você incluiu o caminho para o arquivo conf ( /etc/nginx/proxy.conf) dentro de a location. Eu acredito que ele pertence lá fora .

Dan Dye
fonte
0

Em primeiro lugar, por favor, pelo amor de tudo que é sagrado, não use nginx e httpd. Isso vai ser um pé no saco para depurar.

Em segundo lugar, em nenhum lugar dos documentos vi que eles recomendam esse tipo de configuração.

Use apache ou nginx, isso eliminará metade dos seus problemas.

Verifique também o seu nginx.conf se não estiver incluindo arquivos de outros diretórios, que podem ter um vhost global que substitui o seu.

Você também deve editar sua postagem para remover o domínio na configuração do apache perto dos parâmetros WSGI, pois atualmente está vazando sua configuração de produção.

Remova outros sites dos sites habilitados.

Gothrek
fonte