Migrar de Apache a Lighttpd en Linux
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.
1.- 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
2.- PHP
- 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
- Para comprobar si PHP está bien instalado crearemos el archivo:
/var/www/info.php
cuyo contenido es:<?php phpinfo(); ?>
y entraremos en la URL 127.0.0.1/info.php en el navegador. Si todo está correcto aparecerá la página Info de PHP.
3.- MySQL
- Instalar paquetes mysql-server-5.0 php5-mysql.
4.- phpMyAdmin
- Instalar 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.
5.- Configurar los VirtualHost
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
3 Comentarios en “Migrar de Apache a Lighttpd en Linux”
Deja un comentario
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