Imprimir

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

    Pagina de prueba de Lighttpd

Recursos

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.

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

    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

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”

  • José dice:

    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

Deja un comentario