Nginx + Apache mod_wsgi, problemas para entender como configurar servidores

2

Eu tenho tentado por muito tempo para configurar um ambiente de desenvolvimento no meu Ubuntu 12.04. Minha intenção é configurar tudo como eu teria que fazer mais tarde em um ambiente de produção, então eu segui este tutorial sobre como configurar o Nginx como um proxy reverso com o Apache 2.

Estou pesquisando e minha pergunta é bem parecida com um , mas nenhuma resposta foi dada lá e não posso comentar sobre isso para adicionar algumas das minhas pesquisas.

Vamos entrar nos arquivos:

Apache e wsgi

Primeiro, eu instalei o mod_wsgi do apt-get e criei um arquivo mysite em / etc / apache2 / sites-available:

<VirtualHost *:8080>
    ServerAdmin [email protected]

    ServerName mysite.dev

    ErrorLog /path/to/developmentfolder/mysite/logs/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
    LogLevel debug

    CustomLog /path/to/developmentfolder/mysite/logs/access.log combined

    WSGIDaemonProcess mysite

    WSGIProcessGroup mysite 

    WSGIScriptAlias / /path/to/developmentfolder/mysite/apache/django.wsgi
    <Directory /path/to/developmentfolder/mysite/apache>
    Order allow,deny
    Allow from all
    </Directory>



</VirtualHost>

Note que eu não mudei o httpd.conf para essa configuração (não sei se isso é um erro).

Depois modifiquei o ports.conf:

#NameVirtualHost *:80
#Listen 80

#Modificaciones para usar nginx
Listen 8080
NameVirtualHost *:8080

Em seguida, criei

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('/path/to/developmentfolder/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Em seguida, execute:

# a2ensite mysite

#/etc/init.d/apache2 restart

E eu terminei a configuração do Apache.

Neste ponto, depois de adicionar uma entrada ao meu arquivo hosts, eu posso ir para mysite.dev:8080 e ver a mensagem "It works" do Django.

Nginx

Eu criei o Nginx 1.6.

Criado um usuário para executar o servidor nginx:

    # adduser –system –no-create-home –disabled-login –disabled-password –group nginx

Em seguida, criei um script para o nginx iniciar automaticamente. Na verdade, baixei o link colocou-o em /etc/init.d/, renomeou para nginx e fez algumas alterações:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO


PATH=/opt/nginx/sbin:/sbin:/bin:/usr/sbin:/usr/bin

# Changed the path of the DAEMON as the one in the original script didn't match mine
DAEMON=/usr/sbin/nginx
#Everything from here is exactly as it was
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile /opt/nginx/logs/$NAME.pid \
            --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile /opt/nginx/logs/$NAME.pid \
                --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                /opt/nginx/logs/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                /opt/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
          echo -n "Reloading $DESC configuration: "
          start-stop-daemon --stop --signal HUP --quiet --pidfile     /opt/nginx/logs/$NAME.pid \
              --exec $DAEMON
          echo "$NAME."
          ;;
      *)
            N=/etc/init.d/$NAME
            echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
            exit 1
            ;;
    esac

    exit 0

Em seguida, crie as pastas / usr / local / nginx / conf / sites-aviable / e / usr / local / nginx / conf / sites-enabled / e editado /usr/local/nginx/conf/nginx.conf para isso (após algumas modificações do original do tutorial):

user nginx;
worker_processes 1;
error_log logs/error.log;
pid       logs/nginx.pid;
events {
    worker_connections 1024;
}
http {
    #modificado el include con una ruta donde realmente se encuentra el archivo
    include         /etc/nginx/mime.types;
    default_type    application/octet-stream;
    sendfile        on;
    tcp_nopush      on;
    keepalive_timeout 65;
    gzip            on;
    include         /usr/local/nginx/conf/sites-enabled/*; 
}

Em seguida, crie / usr / local / nginx / conf / sites-aviable / mysite. Como o meu Apache parece estar funcionando bem, e depois de ler algumas recomendações do Nginx, tenho a sensação de que o problema está neste arquivo , mas sou novo com servidores e não consigo descobrir o porquê:

server {
    listen 80;
    server_name mysite.dev;
    access_log /path/to/developmentfolder/mysite/logs/nginx_access.log;
    error_log /path/to/developmentfolder/mysite/logs/nginx_error.log;

    location / {
        proxy_pass  http://mysite.dev:8080;
        include     /usr/local/nginx/conf/proxy.conf;
    }
    location ~ /(js/|css/|imagenes/|media).* {

        root /path/to/developmentfolder/mysite/mysite/static;
    }
    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
        root    html;
    }
}

Este é o arquivo proxy.conf incluído acima:

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 seguida, criou um link simbólico nos sites ativados para o arquivo de configuração nos sites disponíveis:     # ln -s / usr / local / nginx / conf / sites-aviable / ceia / usr / local / nginx / conf / sites-enabled /

Nginx reiniciado:

# /etc/init.d/nginx restart

E quando eu acesso mysite.dev eu só recebo a página "Welcome to Nginx", mas, se eu entendi direito, deveria ser a página "It worked" (welcome to django) novamente.

Também notei que não consigo encontrar os logs de erro nginx, não na minha pasta de desenvolvimento (localizada na minha pasta pessoal) ou em / usr / local / nginx / conf

Como posso fazer o nginx redirecionar corretamente para o apache?

Este é um problema de permissões relacionado ao usuário do nginx que eu criei?

Muito obrigado, desculpe pelo grande post.

    
por Rubén Cabrera 05.08.2014 / 15:02

2 respostas

2

Eureka, eu fiz o trabalho.

O principal problema foi com a informação do tutorial, que estava significativamente desatualizada.

Instalei o nginx 1.6, que cria uma estrutura de pastas semelhante ao Apache, com sites disponíveis e sites habilitados. Não há necessidade (e não adianta se você não sabe como configurá-lo) nos passos que fiz criando essas pastas em / usr / local / nginx ...

O arquivo conf padrão também está localizado no diretório de instalação, /etc/nginx/nginx.conf. Não precisei adicionar linhas a este arquivo .

Este é o arquivo conf para o mysite, localizado em / etc / nginx / sites-available (e também vinculado de sites habilitados)

server {
listen 80;
server_name mysite.dev;


location / {
    proxy_pass  http://mysite.dev:8080/;
    #The following lines were at proxy.conf, but I copied them here trying to avoid any
    # problems managing permissions or files. The include directive for proxy.conf is commented.
    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;
    # This might work, but bypassed it to test a simpler solution
    # include     /usr/local/nginx/conf/proxy.conf;
}
location ^~ /static/{

    alias /var/www/mysite/static/;
    access_log off;

}

# I'm not completely sure about the following, but I don't have any troubles with it yet and
# as far as I know, it might be right.
error_page  500 502 503 504 /50x.html;
location = /50x.html {

    root    html;
}
}

O restante dos arquivos é o que eu listei na pergunta.

Então, NÃO SE ESQUEÇA DE EXCLUIR O SEU NAVEGADOR CACHE após modificações ou você pode ficar louco.

Obrigado a todos pela sua ajuda. Espero que esta resposta ajude as pessoas que enfrentam o mesmo problema no futuro.

    
por 13.08.2014 / 12:14
0

Off the bat, você tem duas tags de fechamento na definição do Host Virtual para o Apache. Eu suponho que você tenha deixado a raiz do documento padrão do servidor para o Apache inalterado, mesmo que não esteja listado.

Para sua configuração do NGINX, notei que você não listou proxy_redirect . Tente incluir isso na sua configuração do Servidor NGINX e veja se especificar manualmente o cabeçalho do local ajuda.

Além disso, aqui está um excelente tutorial Eu fiz referência ao configurar meu próprio ambiente de desenvolvimento. (usando NGINX para arquivos estáticos e Apapche para dinâmico). Talvez lhe dê uma visão adicional para se levantar e funcionar corretamente.

    
por 05.08.2014 / 17:42