Implementando 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. Eu quero agora mover isso para o EC2 para produção. A documentação do django sugere rodar com o apache e o 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 mod_wsgi instalado a partir do 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 habilitados

<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 eu estiver correto, estes 3 arquivos acima devem 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 / 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/;
  }
}      

Se eu estiver correto estes dois arquivos devem configurar nginx para receber pedidos na porta HTTP 80, mas então direcionar requisições para o apache que está executando o aplicativo django na porta 8080. Se eu for para mysite.com, tudo que eu vejo é Bem vindo ao nginx!

Algum conselho sobre como depurar isso?

    
por JCWong 07.10.2012 / 08:52

4 respostas

1

por favor, note que você deve usar www.mysite.com ou mysite.com em seus pedidos (como definido no arquivo de configuração):

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

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

    
por 24.09.2013 / 14:24
0

Antes de mais nada, certifique-se de que você pode acessar sua inscrição em 127.0.0.1:8080 & por favor poste conteúdo de nginx_error.log. Tente copiar e colar após o arquivo conf nginx & verifique se está funcionando. Eu 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/*;

}
    
por 07.05.2013 / 14:53
0

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

    
por 27.07.2016 / 01:21
0
Primeiro, por favor, pelo amor de tudo que é sagrado, não use nginx e httpd. Isso vai ser uma dor na bunda para depurar.

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

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

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

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

Remova outros sites de sites habilitados.

    
por 01.03.2018 / 22:34