Imprimir

Migrar de Apache a Lighttpd en Linux

Posted by The Editor

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

Te puede interesar...

Servidores para la web:
- Servidor HTTP Apache
- PHP: scripts del lado del servidor
- Soporte para CGIs
- Estadísticas web
- Servidor de base de datos:
    - MySQL
    - phpMyAdmin
    - Exportar / Importar MySQL
- Migrar de Apache a Lighttpd
    - XCache con Lighttpd

3 Respuestas para “Migrar de Apache a Lighttpd en Linux”
  1. 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 ?.

  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.  
Deja una respuesta