Hace bastante tiempo conocà un servidor web muy ligero, con gran aceptación y muy bien documentado, llamado lighttpd. En su página web indican que servicios como imageshack, youtube, myspace o tuenti, por citar algunos, utilizan lighttpd de una u otra manera. Asà que algo debe tener, ¿no?
La instalación que tengo hecha cumple los siguientes requisitos:
Para poder llevar a cabo esta instalación supondremos que cronolog y las daemontools ya están instalados. Estas últimas se encargarán de mantener ejecutándose el proceso, informando de posibles errores y dándonos una serie de opciones (detención, rearranque, etc) sobre el mismo. Para más información, consulta su documentación.
La estructura de un servicio en daemontools es muy simple: basta un directorio que contenga otro directorio log/, y dentro de cada uno de estos directorios es necesario colocar un script run.
Para lighttpd crearemos además un directorio root/, en el que colocaremos el fichero lighttpd.conf. Creamos todo esto en cualquier ruta, por ejemplo en /root/ :
# mkdir -p /root/lighttpd/{log,root}
# cd /root/lighttpdEl fichero lighttpd/run debe contener lo siguiente:
#!/bin/sh
exec 2>&1
exec lighttpd -D -f ./root/lighttpd.confY el fichero lighttpd/log/run:
#!/bin/sh
umask 0027
exec setuidgid nobody multilog ./mainY por supuesto, deben tener permisos de ejecución:
# chmod 755 run log/runQuizás ésta sea la parte más compleja. Hasta que conseguà que lighttpd se comportara como yo querÃa, estuve bastante tiempo probando configuraciones. La configuración de PHP ejecutándose como fastcgi está muy bien documentada, en mi opinión la parte más complicada es definir los hosts virtuales, entre ellos el que soportará https.
La sintaxis de lighttpd permite usar condicionales en la configuración. Yo no he usado ninguno de los módulos destinados a hosts virtuales, como pueden ser mod_simple_vhost o mod_evhost. El motivo es que de esa forma estaba bastante limitado a la hora de almacenar los logs y que la configuración para usar SSL se me antojaba bastante más complicada.
La estructura de condicionales para que todo funcione bien es la siguiente:
$SERVER["socket"] == ":80" {
$HTTP["host"] == "dominio1.tld" {
server.document-root = "/var/www/dominio1/htdocs"
accesslog.filename = "|/usr/bin/cronolog /var/www/dominio1/logs/access_%Y%m%d.log"
}
$HTTP["host"] == "sub.dominio2.tld" {
server.document-root = "/var/www/sub-dominio2/htdocs"
accesslog.filename = "|/usr/bin/cronolog /var/www/sub-dominio2/logs/access_%Y%m%d.log"
}
# Más dominios virtuales
}
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "./root/ssl/lighttpd.pem"
server.document-root = "/var/www/https"
accesslog.filename = "|/usr/bin/cronolog /var/www/https/logs/access_%Y%m%d.log"
}Me gustarÃa hacer varias observaciones:
accesslog.filename se usa cronolog, que acepta una expresión con formateadores como %Y%m%d, que serán traducidos por el año, mes y dÃa respectivamente. Los directorios de logs tendrán esta pinta:
# ls logs/
[...]
access_20071229.log access_20080212.log access_20080328.log
access_20071230.log access_20080213.log access_20080329.log
access_20071231.log access_20080214.log access_20080330.log
access_20080101.log access_20080215.log access_20080331.log
access_20080102.log access_20080216.log access_20080401.log
Dejando a un lado los hosts virtuales, es aconsejable que el PID de lighttpd se almacene dentro de root/ con la opción:
server.pid-file = "./root/lighttpd.pid"Para arrancar lighttpd sólo hace falta enlazar en el directorio /service (o donde estén ejecutándose las daemontools, suele ser éste) el directorio /root/lighttpd que creamos al principio:
# ln -sf /root/lighttpd /servicePara saber si todo va bien, basta con esperar unos segundos y ejecutar:
# svstat /service/lighttpd
/service/lighttpd: up (pid 11290) 8 secondsSi por algún motivo no aparece como arrancado, o el PID va variando entre llamadas a svstat y los tiempos son bajos, algo está fallando y debemos consultar el fichero /service/lighttpd/log/main/current.
¿Qué pasa si queremos que el host virtual sea el mismo para www.dominio.tld y para dominio.tld? Es muy fácil de conseguir, sólo hay que cambiar el condicional para ese host virtual. Inicialmente es:
$HTTP["host"] == "dominio1.tld" {
# ...Y sólo hace falta cambiarlo por:
$HTTP["host"] =~ "(www\.)?dominio1.tld" {
# ...Actualización [8/abr/08]: La expresión regular de arriba puede dar problemas si tenemos algún subdominio más bajo dominio1.tld. Es más certera la siguiente: "^(www\.)?dominio1.tld$".
Posteriormente, reiniciamos el servicio mediante svc -dx /service/lighttpd, y tras unos segundos podremos comprobar que ha vuelto a arrancar.
Comentarios
Enviar un comentario nuevo