Servidor web Lighttpd

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.

  1. Instalar Lighttpd.
  2. Configurar PHP para Lighttpd.
  3. Configurar MySQL y phpMyAdmin para Lighttpd.
  4. 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

    Pagina de prueba de Lighttpd

Recursos

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.

    Instalacion de phpMyAdmin

  • 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.

    Pagina 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:

    Pagina de XCache - user

    Y si todo está correcto entraremos en la página de administracirón de XCache.

    Pagina de XCache

Recursos

Artículos en la categoría "Servidores (software)"

  1. Monitorizar servidores con Nagios
  2. Monitorizar routers SNMP con MRTG
  3. Administración de máquinas Linux con Webmin
  4. Shell remoto con Telnet
  5. Servidor DNS Bind
  6. Servidor de IPs dinámicas DHCP
  7. Servidor de hora NTP
  8. Servidor proxy Squid
  9. Servidor de correo electrónico
  10. Servidor de terminales LTSP
  11. Servidor web Apache
  12. Soporte para PHP en Apache
  13. Soporte para CGI en Apache
  14. Analizador de logs de Apache
  15. Servidor de base de datos MySQL
  16. Servidor web Lighttpd
  17. Whois: Quién es el propietario de un dominio
  18. Servidor de archivos FTP
  19. Compartir archivos en Linux: NFS
  20. Compartir archivos en Windows: Samba
  21. Control de versiones: CVS y Subversion
  22. Servidor de streaming por Internet
  23. Servidor de streaming en red local

4 Comments:

  1. 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 ?.

  2. Pienso que este es el problema:

    mod_redirect
    mod_rewrite

    Ahora, ¿como se soluciona?, francamente ¡no se!

    Saludos,

    gep

  3. 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

  4. 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.