Migrar de Apache a Lighttpd
La tecnología LAMP (Linux, Apache, PHP, MySQL) es actualmente la más extendida para montar servidores web pero existen otros servidores HTTP que pueden reemplazar a Apache, como Lighttpd (lighttpd.net, lighty para los amigos, ligerito), diseñado para el "problema c10k" (manejar 10.000 conexiones simultáneas).
Lighttpd es rápido (su lema es Fly light) y consume muy pocos recursos y está ganando popularidad gracias a su buen desempeño en sitios web enormemente exigentes como YouTube. Si tenemos instalado LAMP no tendremos muchas dificultades en migrar a LLMP (Linux, Lighttpd, PHP, MySQL). Veamos cómo hacerlo.
- Instalar Lighttpd.
- Configurar PHP para Lighttpd.
- Configurar MySQL y phpMyAdmin para Lighttpd.
- Configurar VirtualHost en Lighttpd.
Instalar Lighttpd
- Instalar paquete lighttpd. El script de inicio es:
/etc/init.d/lighttpd
y el archivo de configuración:
/etc/lighttpd/lighttpd.conf - Para que Lighttpd no liste el contenido de los directorios editaremos el archivo de configuración
/etc/lighttpd/lighttpd.conf y reemplazaremos la línea:
server.dir-listing = "enable"
por:
server.dir-listing = "disable"
- Lighttpd se identifica por defecto con su nombre y versión. Por seguridad ocultaremos
estos datos (al menos la versión) y añadiremos en /etc/lighttpd/lighttpd.conf
la línea:
server.tag = "lighttpd"
- Para comprobar la sintaxis de /etc/lighttpd/lighttpd.conf haremos:
# lighttpd -t -f /etc/lighttpd/lighttpd.conf Syntax OK
- Para aplicar los cambios reiniciamos Lighttpd:
# /etc/init.d/lighttpd restart
- Para asegurarnos de que Lighttpd está escuchando en el puerto 80 haremos:
# netstat -ntulp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name ... tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 4367/mysqld tcp6 0 0 :::80 :::* LISTEN 20249/lighttpd tcp6 0 0 :::22 :::* LISTEN 4277/sshd ...
- Comprobaremos si Lighttpd está bien instalado tecleando 127.0.0.1 o localhost en
el navegador. Si todo está correcto aparecerá la página de prueba de Lighttpd, el archivo:
/var/www/index.lighttpd.html
Recursos
- Ayuda de Lighttpd: redmine.lighttpd.net/wiki/lighttpd
Configurar PHP para Lighttpd
- Instalar paquete php5-cgi php5-curl.
- Editamos el archivo /etc/php5/cgi/php.ini y reemplazamos la línea:
cgi.fix_pathinfo=0
por:
cgi.fix_pathinfo=1
- Nos aseguramos de que index.php figura en /etc/lighttpd/lighttpd.conf
como página por defecto:
index-file.names = ( "index.php", "index.html", "index.htm", "default.htm", "index.lighttpd.html" )
- Para habilitar el módulo mod_fastcgi ejecutaremos el comando:
# lighty-enable-mod fastcgi
que lo que hace es crear el enlace simbólico:
/etc/lighttpd/conf-enabled/10-fastcgi.conf
que apunta a:
/etc/lighttpd/conf-available/10-fastcgi.conf - Para aplicar los cambios reiniciamos Lighttpd:
# /etc/init.d/lighttpd restart
Configurar MySQL y phpMyAdmin para Lighttpd
- Instalar MySQL (paquetes mysql-server-5.0 php5-mysql).
- Instalar phpMyAdmin (paquete phpmyadmin). Durante la instalación nos preguntará qué servidor HTTP tenemos instalado. Seleccionaremos lighttpd.
- Se habrá creado el enlace simbólico:
/etc/lighttpd/conf-enabled/50-phpmyadmin.conf
que apunta a:
/etc/lighttpd/conf-available/50-phpmyadmin.conf
que a su vez apunta a:
/etc/phpmyadmin/lighttpd.conf - Reiniciamos Lighttpd para aplicar los cambios:
# /etc/init.d/lighttpd restart
- Comprobaremos si MySQL y phpMyAdmin están bien instalados entrando en la URL 127.0.0.1/phpmyadmin. Si todo está correcto aparecerá la página de inicio de phpMyAdmin.
Configurar VirtualHost en Lighttpd
Si nuestro Lighttpd tiene que servir varios dominios (por ejemplo www.domain.com y www.otherdomain.com) configuraremos en /etc/lighttpd/lighttpd.conf un VirtualHost para cada uno de ellos:
# redireccionamos de http://domain.com a http://www.domain.com $HTTP["host"] == "domain.com" { url.redirect = ( "^/(.*)" => "http://www.domain.com/$1" ) } # configuramos http://www.domain.com $HTTP["host"] == "www.domain.com" { server.document-root = "/var/www/domain/" server.name = "www.domain.com" dir-listing.activate = "disable" server.errorlog = "/var/log/lighttpd/domain.com.error.log" accesslog.filename = "/var/log/lighttpd/domain.com.access.log" # reglas rewrite para permalinks de WordPress url.rewrite = ( "^/(wp-.+).*/?" => "$0", "^/(.*).(.+)$" => "$0", "^/(.+)/?$" => "/index.php/$1" ) } |
Estas reglas rewrite son para WordPress y equivalen al archivo .htaccess generado por WordPress para Apache, cuyo contenido suele ser:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
Además tenemos que activar los módulos mod_redirect y mod_rewrite descomentando las líneas correspondientes:
server.modules = ( "mod_access", ... "mod_redirect", "mod_rewrite", ... # "mod_evasive" ) |
Para aplicar los cambios reiniciamos Lighttpd:
# /etc/init.d/lighttpd restart |
XCache con Lighttpd en Linux
XCache (xcache.lighttpd.net) es un cacheador para PHP muy popular que se suele instalar habitualmente con el servidor web Lighttpd.
Lo que hace XCache es cachear en la RAM los scripts compilados de PHP de manera que en peticiones posteriores no será necesario pasar por todas las fases de interpretación del código, acelerando así el tiempo de carga de las páginas unas 5 veces. Veamos cómo instalar y configurar XCache con Lighttpd.
- Instalar paquete php5-xcache.
- El archivo de configuración de XCache es:
/etc/php5/conf.d/xcache.ini
Lo que haremos será añadir su contenido al archivo de configuración de PHP:
/etc/php5/cgi/php.ini
ejecutando el comando:# cat xcache.ini >> /etc/php5/cgi/php.ini
- Una vez hecho esto editamos el archivo de configuración de PHP:
/etc/php5/cgi/php.ini
y asignaremos un tamaño adecuado a xcache.size y xcache.var_size para que no se produzcan OOMs (Out Of Memory) que ocurren cuando un script no puede ser cacheado por no disponer de suficiente espacio en memoria. Para ello reemplazaremos las líneas:xcache.size = 16M xcache.var_size = 0M
por:
xcache.size = 64M xcache.var_size = 2M
Si nuestro procesador tiene varias CPUs, por ejemplo 2, reemplazaremos las líneas:
xcache.count = 1 xcache.var_count = 1
por:
xcache.count = 2 xcache.var_count = 2
- Para habilitar la interfaz web de XCache editamos el archivo de configuración de Lighttpd:
/etc/lighttpd/lighttpd.conf
y añadimos la línea:alias.url += ("/xcache-admin/" => "/usr/share/xcache/admin/")
En /etc/php5/cgi/php.ini establecemos el usuario, por ejemplo admin:
xcache.admin.user = "admin"
Y la suma md5 del password. Por ejemplo, para el password 1234:
xcache.admin.pass = "81dc9bdb52d04dc20036dbd8313ed055"
- Para aplicar los cambios reiniciamos Lighttpd:
# /etc/init.d/lighttpd restart
- Para comprobar si XCache está bien instalado entraremos en el navegador en la URL:
127.0.0.1/xcache-admin/
Nos pedirá usuario y password:Y si todo está correcto entraremos en la página de administracirón de XCache.
Recursos
- Ayuda de XCache: xcache.lighttpd.net/wiki
Hola. Muy buena tu información.
He seguido los pasos y todo ha funcionado muy bien hasta el punto 4, ya que no se han creado los enlaces simbólicos para el phpmyadmin, y al entrar en 127.0.0.1/phpmyadmin aparece “404 – Not Found”.
Los creé manualmente desde Terminal pero tampoco me funcionó.
¿ Cuál podrá ser la causa ?.
Pienso que este es el problema:
mod_redirect
mod_rewrite
Ahora, ¿como se soluciona?, francamente ¡no se!
Saludos,
gep
Posiblemente, una solucion sea forzando la URL de acceso a PHPMyAdmin, eso se podria hacer agregando una linea en la configuracion de PhpMyAdmin, en
/etc/phpmyadmin/config.inc.php,
Reemplazando la URL por la de nuestra URL de PhpMyAdmin, algo asi:
$cfg['PmaAbsoluteUri'] = ‘http://www.mi-dominio.com/un_camino/phpmyadmin/’
Ahora, ¡no aseguro nada!, pero con probar nada se pierde :-)
Saludos,
gep
Como siempre muy bueno el artículo, pero tengo una duda:
Mi intención es probar un multisitio con Drupal 7 (sobre Debian stable) en localhost, del estilo http://localhost/sitio1, http://localhost/sitio2, etc… y así tener varios sitios con una sola instalación. Seguí un artículo de Benjamin Clark, pero no acabo de ponerlo en marcha, y no quiero tener que instalar Apache para ello: me ba muy bien el lighty.
Cualquier orientación es bienvenida.
Gracias de antemano.