+ Apache + lighttpd mod_wsgi Django

Comentarios

He escrito de cómo configurar Apache, mod_python y Django y cómo poner lighttpd detrás de Apache .

Recientemente he decidido organizar mi sitio web más visitado en un proveedor de VPS distintas [1], y comenzó la búsqueda para actualizar mis conocimientos acerca de la implementación de Django. Hice cosas de forma diferente esta vez, usando mod_wsgi (la manera recomendada de la implementación de Apache y Django ), la configuración de Apache y lighttpd está detrás de contenido dinámico (en otras palabras, lighttpd Servirá medios estáticos).

Hice todo lo que a continuación en el último par de días, y no escribió las cosas que estaba haciendo, porque implicaba una gran cantidad de experimentación (ensayo y error) para mí. El tal, yo estoy escribiendo este artículo basado en la memoria y revisando mis archivos de configuración. Si tiene algún problema, por favor deje un comentario y me limitaré a aclarar cualquier omisión.

Aquí le indicamos cómo hacerlo:

Instale los sospechosos de siempre

Puedo elegir la distribución Linux Ubuntu, y la instalación de los hechos es una brisa en él. sudo apt-get install package-name . Esta parte está bien cubierta por la web, asi que no voy a comentar en detalle cómo se hace. Basta decir, algunos de los paquetes que he instalado Si apache2 , libapache2-mod-wsgi y lighttpd .

Configurar Apache y mod_wsgi para cargar su proyecto

Dado que el acto lighttpd ¿El servidor principal de mi dominio, decidí mudarme Apache al puerto 81:

sudo vi / etc/apache2/ports.conf

Sobreescribir ip: puerto con líneas de Tesis:

NameVirtualHost 127.0.0.1:81
Listen 81

Cuando usted pone su propio módulo en Python en nuevas instalaciones de Ubuntu , ha cambiado a /usr/local/lib/python2.6/dist-packages/ . Por lo tanto, he subido Django, mi proyecto y otros módulos necesarios (que no fueron instalados por apt-get ) a este directorio, dejándome con la estructura de las siguientes acciones:

/ Usr/local/lib/python2.6/dist-packages/django /
/ Usr/local/lib/python2.6/dist-packages/my_project_name /

La documentación mod_wsgi Tiene un excelente artículo sobre la integración de Django , pero que es bastante largo. Usted debe leer de todas formas, ya que hay muchas opciones que usted puede ser que desee utilizar. Aquí hay una Hoja de Trucos:

Crea la raíz del documento para su nombre de dominio:

sudo mkdir / var / www / example.com

Que creará el archivo se cargue por mod_wsgi con la configuración de su proyecto:

sudo mkdir / usr/local/lib/python2.6/dist-packages/project_name/apache /
sudo vi / usr/local/lib/python2.6/dist-packages/project_name/apache/django.wsgi

Con estos contenidos:

import sys
os de importación

sys.path.append ('/ usr/local/lib/python2.6/dist-packages')
DJANGO_SETTINGS_MODULE 'os.environ ['] = 'project_name.settings'

django.core.handlers.wsgi importación

django.core.handlers.wsgi.WSGIHandler aplicación = ()

Crear un archivo de configuración de dominio para Apache:

sudo vi / etc/apache2/sites-available/example.com

Con estos contenidos:

<VirtualHost 127.0.0.1:81>
ServerName example.com
ServerAdmin username@example.com

DocumentRoot / var / www / example.com

Alias / media / / usr/local/lib/python2.6/dist-packages/django/contrib/admin/media /
<Directory /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media>
Options-Indexes
Orden negar, permiten
Dejar de todas las
</> Directorio

Alias / project_media_dir / usr/local/lib/python2.6/dist-packages/project_name/templates/project_media_dir /
<Directory /usr/local/lib/python2.6/dist-packages/project_name/templates/project_media_dir>
Options-Indexes
Orden negar, permiten
Dejar de todas las
</> Directorio

WSGIScriptAlias / usr/local/lib/python2.6/dist-packages/project_name/apache/django.wsgi
WSGIDaemonProcess example.com
WSGIProcessGroup example.com

<Directory /usr/local/lib/python2.6/dist-packages/project_name/apache>
Orden negar, permiten
Dejar de todas las
</> Directorio
</> VirtualHost

Activar es el siguiente:

cd / etc/apache2/sites-enabled /
.. Sudo ln-s / sitios disponibles / example.com

Configurar lighttpd con proxy peticiones de los medios no estático a Apache

Usé el "proxy inverso MySQL blog de rendimiento para Lighttpd" artículo como base para la configuración de mi propia. Por lo tanto, tendremos una url http://example.com/server-status , lo que exigirá la autenticación, lo que nos permite ver el estado del servidor Apache.

Cree un directorio para los registros de errores:

sudo mkdir / var / log / lighttpd / example.com

Crear un archivo de configuración de dominio para lighttpd:

sudo vi / etc/lighttpd/conf-available/20-example.com.conf

Con estos contenidos:

server.modules + = ("mod_auth",
"Mod_status",
"Mod_proxy",
)

$ HTTP ["host"] = ~ "(^ | \.) Ejemplo \. Com $" (
$ HTTP ["url"]! ~ \ ". (Js | css | gif | | jpg png | ico | txt | swf | html htm |) $" (
proxy.server = ("" => (
("Host" => "127.0.0.1", "puerto" => 81)
))
)

server.document-root = "/ var / www / example.com /"
server.errorlog = "/ var / log / lighttpd / example.com / error.log"
decirle listing.activate = "desactivar"

auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/ var / www /. htpasswd"
auth.require = ("/" server-status => (
"Método" => "básico",
"Reino" => "status",
"Requerir" => "valid-user"
)
)
)

Hay líneas digno de mención en la configuración anterior:

$ HTTP ["host"] = ~ "(^ | \.) Ejemplo \. Com $" (

Este se ajustará dentro de las directivas se aplican únicamente a las peticiones para example.com.

$ HTTP ["url"]! ~ \ ". (Js | css | gif | | jpg png | ico | txt | swf | html htm |) $" (
proxy.server = ("" => (
("Host" => "127.0.0.1", "puerto" => 81)
))
)

Estos enviará ninguna solicitud de documentos que no terminan en las extensiones especificadas a ip 127.0.0.1, puerto 81, Apache DONDE vidas. En esencia, todo lo que es contenido estático (o, más exactamente, a que el | expresión regular separados), serán atendidos por lighttpd.

cd / etc / lighttpd / conf habilitado /
.. Sudo ln-s / conf-disponible / example.com.conf

Dígale al sistema de ficheros donde los proyectos y administración de Django contenido estático se encuentran:

sudo ln-s / usr/local/lib/python2.6/dist-packages/django/contrib/admin/media / var / www / example.com / media
sudo ln-s / usr/local/lib/python2.6/dist-packages/project_name/templates/project_media_dir / var / www / example.com / project_media_dir /

Por último, reinicie todo para la nueva configuración se puede aplicar

sudo / etc/init.d/apache2 restart
sudo / etc / init.d / lighttpd reiniciar

Entonces, ¿qué sucede realmente?

Cuando un visitante entra a su website (example.com), la solicitud lighttpd Will primer golpe. Si la ruta de documento no termina con la cadena en nuestra lista de extensiones de contenido estático, la solicitud será proxy de Apache en el puerto 81, lighttpd de otro modo se sirve.

Y eso es todo, si mi memoria no es correcta. ¿Me perdí algo? Comentario a voluntad.

[1] linodivas, si usted es curioso. Principalmente porque el ancho de banda es más barato. Si usted está buscando un linodivas referencia, linodivas código de descuento o promoción linodivas código, regístrate través de este enlace que me la remisión de crédito. Gracias :)

  • Lukas
    ¡Impresionante! Esto me ayudó mucho. Sólo una pregunta poco: Quiero SSL - ¿Es necesario configurar Lighttpd en el cifrado SSL, o ambos, Lighttpd y Apache? Tanque de usted! (Ni idea de cómo este proxy-pide-cosa funciona: /)
blog alimentado por los comentarios Disqus

Português flagItaliano flagCoreano flagChinês (simplificado) flagEnglish flagAlemâo flagFrancês flagEspanhol flag
Japonês flagÁrabe flagRusso flagHolandês flagBúlgaro flagTcheco flagCroata flagDinamarquês flag
Finlandês flagHindu flagPolonês flagRomeno flagSueco flagGrego flagNorueguês flag 
By N2H
Dolet 96 de descuento en alojamiento DreamHost!
Utilice el PROMO "CODE" inercia. LAMP con 20GB de espacio y 1 TB de transferencia.

Artículos Relacionados

  • No hay publicaciones relacionadas

Categorías