2011-02-03 16 views
8

He configurado mi aplicación Django en Apache + mod_wsgi. Para servir los archivos estáticos, estoy usando Nginx, como se sugiere en el sitio web del proyecto de Django. http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/Configuración para Django, Apache y Nginx

Apache se está ejecutando en el puerto 8081 y nginx está en el puerto 80. Ahora algunas personas han sugerido que mi configuración es incorrecta y debería invertir los roles de Apache y Nginx. No estoy seguro de por qué debería ser así. Y si mi configuración es incorrecta, ¿por qué el sitio web de django sugiere un método incorrecto?

+0

Es seguro seguir con Nginx en el puerto 80. ¿Te importa compartir dónde has encontrado a personas que dicen que apache es un mejor proxy inverso? Los puntos de referencia son clave. –

+0

Mientras estaba configurando mi aplicación, publiqué preguntas en http://stackoverflow.com/questions/4868213/apache-reverseproxy-not-working-noob/4870186 y sf http://serverfault.com/questions/229842/apache-reverseproxy-to-nginx. Y obtuve una respuesta similar en ambas páginas. – Neo

Respuesta

12

Los documentos django a los que ha vinculado no sugieren que use apache como proxy inverso. Simplemente sugieren que use un servidor web separado, por lo que diría que los documentos no son claros sobre ese tema: no están sugiriendo nada incorrecto.

Mi respuesta inicial fue asumir que tenías nginx como un proxy inverso porque el puerto 80 es el puerto HTTP, el que se usa cuando un navegador intenta ir a una url sin puerto especificado.

Existen numerosas guías completas a la creación de nginx + Apache a través de una rápida búsqueda en Google, pero aquí es lo esencial para la creación de nginx:

location/{ 
     # proxy/requests to apache running django on port 8081 
     proxy_pass   http://127.0.0.1:8081/; 
     proxy_redirect  off; 
    } 

location /media/ { 
     # serve static media directly from nginx 
     root /srv/anuva_project/www/; 
     expires 30d; 
     break; 
    } 

Todo lo que necesita hacer es quitar las líneas de proxy de su Apache configuración y agregue las declaraciones de proxy a su nginx.conf en su lugar.

Si realmente desea servir su sitio desde el puerto 8081, podría hacer que nginx escuche en el puerto 8081 y haga que apache escuche en un puerto diferente.

El punto es que apache se encuentra en algún puerto oscuro, solo atiende solicitudes enviadas desde nginx, mientras que la aplicación de archivos estáticos es manejada por nginx.

+0

Estoy francamente confundido aquí. O tal vez tengo los conceptos de todo el servidor mal. Como Django se ejecuta en Apache, para servir medios estáticos, tengo que revertir el proxy a través de Apache para llegar a nginx. Así que estoy usando el proxy inverso en los archivos de configuración de Apache. Por ejemplo, mi aplicación principal está en: http: //enpass.djangoserver: 8081/accounts. Mientras estoy en las plantillas django, recupero archivos estáticos de nginx. Así que supongo que apache está al frente (y no nginx, como dijiste en tu respuesta). O tengo mis conceptos al revés. – Neo

+0

El puerto 80 es el puerto HTTP, por lo que visitar example.com sería el servidor que esté escuchando en el puerto 80. En su caso, es nginx. Nginx enviaría solicitudes de proxy no a sus carpetas multimedia a apache en 8081 –

+0

"Nginx enviaría las solicitudes de proxy a sus carpetas multimedia a Apache en 8081". ¿Puede explicarlo mejor? Soy novato en lo que respecta a apache/nginx. Y seguramente, no he configurado Nginx para ningún tipo de proxy. – Neo

Cuestiones relacionadas