Anoche me puse a jugar un rato con un VPS porque tenía ganas de instalar lighttpd (AKA lighty) junto con Apache, de manera de montar un escenario similar al que proponía Cesar hace un tiempo en el blog del Web & Beer. Según lo que comenta ese artículo, Lighty es una opción muy interesante para montar proxies que distribuyan automáticamente la carga entre distintos webservers para servir contenidos de distinto tipo (básicamente distinguiendo entre estático y dinámico).

Lighttpd
Por lo tanto, me puse a jugar un poco en este VPS para montar en él un lighty y un Apache, el primero escuchando en el puerto 80 y el segundo en el 8080. El primero va a ser el que reciba los requests y sirva el contenido estático y el segundo el que procese los requests de contenido dinámico (php). Como dije, esto fue más que nada un juego, porque el proyecto para el que lo voy a implementar no lo amerita y de hecho quizás poner un proxy en un servidor solo (no como balanceador de distintos nodos, sino balancenado la carga internamente) probablemente no se justifique. Pero valió la pena para meterme un poco en el tema de lighty y armar una pequeña guía de instalación.
En este caso, por culpa del VPS, tuve que trabajar con CentOS (hubiera preferido Slackware, pero es lo que había). Sin embargo, procuré hacer la instalación compilando todo yo mismo, porque me resulta más entretenido y creo que da mejores resultados.
Instalación de Lighttpd
La instalación de lighttpd es bastante sencilla e intuitiva para cualquiera que haya compilado e instalado Apache o cualquier otro servidor en Linux.
En primer lugar, lógicamente, hay que descargar el software de la web oficial: http://www.lighttpd.net/download. A mi me gusta hacer esto en el directorio /usr/src.
# cd /usr/src
# wget http://www.lighttpd.net/download/lighttpd-1.4.20.tar.gz
# tar zxvf lighttpd-1.4.20.tar.gz
# cd lighttpd-1.4.20
Luego, suponiendo que tenemos instaladas las librerías que podamos llegar a necesitar (glib2, openssl, libpcre), pasamos a configurar y compilar. Si no tenemos las librerías podemos ir descargandolas de sus sitios oficiales y compilándolas, o instalarlas con yum.
Yo utilicé el siguiente configure para mi Lighty:
./configure \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconfdir=/etc/lighttpd\
--datadir=/usr/share \
--includedir=/usr/include \
--libdir=/usr/lib \
--libexecdir=/usr/libexec \
--localstatedir=/var \
--sharedstatedir=/usr/com \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--with-openssl
Luego compilamos e instalamos:
# make && make install
Ahora debemos crear el usuario con el que va a correr nuestro Lighty.
# adduser -m -d /var/www -s /sbin/nologin lighttpd
Creamos algunos directorios adicionales para ubicar los distintos archivos de logs y configuración.
# mkdir -p /etc/lighttpd
# mkdir -p /var/log/lighttpd
# chown -R lighttpd:lighttpd /var/log/lighttpd
Ahora vamos a crear nuestro archivo de configuración. Yo utilice uno de la guía en la que me basé para hacer esta otra guía y lo modifiqué según lo que yo necesitaba, para incorporar la configuración del proxy. También se pueden ver ejemplos en la página oficial del Lighttpd. Notese que lighttpd no instala un archivo de configuración por default, como sí lo hace Apache, porque casi sin configuración puede funcionar. De hecho en la página de Lighttpd se observa una configuración muy básica para un servidor de contenido estático en 8 líneas.
# cd /etc/lighttpd
# wget http://www.tail-f.com.ar/files/lighttpd.conf.txt
# mv lighttpd.conf.txt lighttpd.conf
# chown lighttpd:lighttpd lighttpd.conf
# vi lighttpd.conf
Teniendo la configuración de Lighty tal como la queremos, pasamos a copiar el script a nuestra carpeta /etc/init.d. Esta sería la parte del a guía más dependiente de la plataforma. Aquí también partí de un script que encontré en la misma guía y le saqué algunas cosas de unos módulos que yo no iba a utilizar.
Pueden descargar mi versión de aquí, pero lo que tenemos que destacar, son las siguientes líneas.
## Proxy
proxy.server = (".php" => ((
"host" => "127.0.0.1",
"port" => 8080
)),
".css" => ((
"host" => "127.0.0.1",
"port" => 80
)),
".jpg" => ((
"host" => "127.0.0.1",
"port" => 80
)),
".gif" => ((
"host" => "127.0.0.1",
"port" => 80
)),
".png" => ((
"host" => "127.0.0.1",
"port" => 80
)),
".flv" => ((
"host" => "127.0.0.1",
"port" => 80
)),
".js" => ((
"host" => "127.0.0.1",
"port" => 80
)),
".swf" => ((
"host" => "127.0.0.1",
"port" => 80
# --- stripped ---- #
## bind to port (default: 80)
server.port = 80
En esas líneas vemos que se define un proxy, que de acuerdo a las extensiones de los archivos va a mandar los requests a una destinación u otra. En este caso, que solamente tenemos una máquina, los archivos .php se envían al puerto 8080, donde tendremos el Apache, y los demás al puerto 80 que es donde escuchará Lighty. Luego, al final vemos, justamente, la configuración para que Lighty bindee con el puerto 80.
# cd /etc/init.d
# wget http://www.tail-f.com.ar/files/lighttpd.init.txt
# mv lighttpd.init.txt lighttpd
# chmod +x lighttpd
# chkconfig --add lighttpd
# chkconfig lighttpd on
Y por último, estamos listos para iniciar nuestro nuevo servicio.
# service lighttpd start
Fuente: NixCraft.
Instalación de Apache

Apache Web Server
Vamos a ir, por último, a la instalación de Apache 2.2. Esto es bastante más estándar y, como el post está dedicado más que nada a Lighty, solamente voy a dejar mi configure y los pasos de instalación sin demasiada explicación.
Descargamos el Apache del sitio oficial y lo configuramos.
# cd /usr/src
# wget http://apache.dattatec.com/httpd/httpd-2.2.10.tar.bz2
# tar jxvf httpd-2.2.10.tar.bz2
# cd httpd-2.2.10
Esta es la configuración que elegí yo, basado en gran parte en la que viene por default con Directadmin.
# ./configure \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconfdir=/etc/httpd/conf \
--datadir=/usr/share \
--includedir=/usr/include \
--libdir=/usr/lib \
--libexecdir=/usr/libexec \
--localstatedir=/var \
--sharedstatedir=/usr/com \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--enable-so \
--enable-dav \
--enable-dav-fs \
--enable-dav-lock \
--enable-suexec \
--enable-deflate \
--enable-unique-id \
--with-suexec-caller=apache \
--with-suexec-docroot=/ \
--with-suexec-gidmin=100 \
--with-suexec-logfile=/var/log/httpd/suexec_log \
--with-suexec-uidmin=100 \
--with-suexec-userdir=public_html \
--with-suexec-bin=/usr/sbin/suexec \
--with-included-apr \
--with-pcre=/usr/local \
--includedir=/usr/include/apache \
--libexecdir=/usr/lib/apache \
--datadir=/var/www \
--localstatedir=/var \
--enable-logio \
--enable-ssl \
--enable-rewrite \
--with-ssl=/usr \
--enable-headers \
--enable-expires
Luego compilamos e instalamos.
# make && make install
En este punto yo decidí crear un usuario httpd para el Apache, y luego ponerle a la carpeta /var/www como dueño al usuario lighttpd y como grupo httpd.
# adduser -m -d /var/www -s /sbin/nologin httpd
# chown -R lighttpd:httpd /var/www
# chmod -R 770 /var/www
Luego hay que editar la configuración de Apache, fundamentalmente para decirle que escuche en el puerto 8080. A continuación algunos elementos importantes de la configuración.
Listen 8080
User httpd
Group httpd
ServerName localhost:8080
ErrorLog "/var/log/httpd/error.log"
CustomLog "/var/log/httpd/access.log" common
Por último, hay que instalar el script en el /etc/init.d (yo obtuve el mío de otro servidor, pero en Google debe haber varias versiones, porque es algo muy común). Luego hay que darle los permisos de ejecusión, ejecutar el chkconfig como con Lighty, e iniciar el servicio.
# service httpd start
Luego sobre el mismo servidor instalé PHP y MySQL, pero no me quiero extender sobre la configuración de esos servicios para no desvirtuar este post. En todo caso, en un futuro, publicaré mi configuración habitual de PHP para quienes estén interesados.