Instalación y configuración de Lighttpd

General, Servidores, Unix Añadir comentario

instalar_lighttpd

Lighttpd es un servidor web open source extremadamente rápido y eficiente, y, durante años, ha demostrado ser el mejor aliado de las webs con alto tráfico y problemas de rendimiento. Sobre todo, destaca por su excelente manejo de la memoria, incluso en servidores con 512MB funcionará de maravilla.

Al igual que apache, está compuesto por diversos módulos que podemos activar a nuestro antojo como CGI, Auth, SSI, Rewrite, etc…

En mi caso, si bien lighttpd puede sustituir por completo a apache, llevo utilizándolo durante varios años para servir exclusivamente archivos estáticos (htmls, imágenes, javascript, videos, etc.) con 100% de fiabilidadad.

Disponer de un servidor web independiente para los archivos estáticos es la mejor forma de liberar de esa pesada carga de trabajo a nuestro queridisimo apache, para que éste se encargue en exclusiva de procesar los archivos dinámicos (las páginas de la web).

En caso de que no dispongamos de una máquina en exclusiva para instalar Lighttpd, y aunque no es una configuración muy conocida o muy utilizada, es perfectamente factible el utilizar un sólo servidor físico para ambos servicios (apache y lighttpd), además de una forma muy sencilla, el único requisito es que ambos servicios no usen la misma ip, o el mismo puerto para evitar conflictos (ojo con esto, ya que tanto apache como lighttpd por defecto escuchan en el puerto 80 todas las ips disponibles, por tanto habrá que configurar ambos para que sólo escuchen en una o varias ips, y que éstas nunca coincidan). Ésta configuración es especialmente útil para webs que sirven muchos archivos estáticos, imágenes, animaciones, javascript, etc… Permitiéndonos maximizar el rendimiento de nuestra web sin gastos adicionales en hardware.

A continuación compilaremos, instalaremos y realizaremos la configuración de Lighttpd.

1. Requisitos

  • Servidor con cualquier distribución linux (en nuestro ejemplo usamos Centos 5 el cual tiene una instalación básica del panel de control Plesk 8.6)
  • gcc, gcc-c++ y librerías de compilación
  • En caso de querer utilizar apache y lighttpd en el mismo servidor de forma simultánea, se necesitarán 2 ips

2. Instalar las librerías necesarias

yum install pcre zlib bzip2 pcre-devel zlib-devel bzip2-devel

3. Descargar y compilar Lighttpd

# Descargar
wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz
tar -xvzf lighttpd-1.4.19.tar.gz
cd lighttpd-1.4.19

# Compilar
./configure --prefix=/usr/local/lighttpd
make
make install

# Enlace al binario
ln -s /usr/local/lighttpd/sbin/lighttpd /usr/sbin/lighttpd

# Configuración del servicio
sed -e 's/FOO/lighttpd/g' doc/rc.lighttpd > /etc/init.d/lighttpd
sed -e 's/FOO/lighttpd/g' doc/rc.lighttpd.redhat > /etc/init.d/lighttpd
chmod a+rx /etc/init.d/lighttpd
cp -p doc/sysconfig.lighttpd /etc/sysconfig/lighttpd
install -Dp ./doc/lighttpd.conf /etc/lighttpd/lighttpd.conf
chkconfig lighttpd on

# Crear directorio de logs
mkdir /var/log/lighttpd
chmod -R 777 /var/log/lighttpd

4. Configurar Lighttpd

En /etc/lighttpd/lighttpd.conf tenemos el archivo de configuración de Lighttpd, por defecto, incluye una plantilla con múltiples opciones de configuración.

Adicionalmente, en http://trac.lighttpd.net/trac/wiki/TutorialConfiguration encontraremos todas las opciones de configuración.

Debemos prestar especial atención a las directivas server.port y server.bind para forzar al servidor a que no escuche en todas las Ips disponibles y así evitar conflictos con Apache en caso de que lo tengamos instalado.

En nuestro caso, ésta es la configuración que hemos utilizado:

server.port                = 80
server.bind                = "55.55.55.55" # Reemplazar por nuestra ip
server.username            = "apache" # Para evitar problemas de permisos
server.groupname           = "apache"

server.modules              = ( "mod_access","mod_simple_vhost","mod_accesslog" )
server.document-root        = "/var/www/vhosts"
server.errorlog             = "/var/log/lighttpd/error.log"
accesslog.filename          = "/var/log/lighttpd/access.log"

index-file.names            = ( "index.html","index.htm", "default.htm" )
url.access-deny             = ( "~", ".inc" )

mimetype.assign             = (
  ".pdf"          =>      "application/pdf",
  ".sig"          =>      "application/pgp-signature",
  ".spl"          =>      "application/futuresplash",
  ".class"        =>      "application/octet-stream",
  ".ps"           =>      "application/postscript",
  ".torrent"      =>      "application/x-bittorrent",
  ".dvi"          =>      "application/x-dvi",
  ".gz"           =>      "application/x-gzip",
  ".pac"          =>      "application/x-ns-proxy-autoconfig",
  ".swf"          =>      "application/x-shockwave-flash",
  ".tar.gz"       =>      "application/x-tgz",
  ".tgz"          =>      "application/x-tgz",
  ".tar"          =>      "application/x-tar",
  ".zip"          =>      "application/zip",
  ".mp3"          =>      "audio/mpeg",
  ".m3u"          =>      "audio/x-mpegurl",
  ".wma"          =>      "audio/x-ms-wma",
  ".wax"          =>      "audio/x-ms-wax",
  ".ogg"          =>      "application/ogg",
  ".wav"          =>      "audio/x-wav",
  ".gif"          =>      "image/gif",
  ".jar"          =>      "application/x-java-archive",
  ".jpg"          =>      "image/jpeg",
  ".jpeg"         =>      "image/jpeg",
  ".png"          =>      "image/png",
  ".xbm"          =>      "image/x-xbitmap",
  ".xpm"          =>      "image/x-xpixmap",
  ".xwd"          =>      "image/x-xwindowdump",
  ".css"          =>      "text/css",
  ".html"         =>      "text/html",
  ".htm"          =>      "text/html",
  ".js"           =>      "text/javascript",
  ".asc"          =>      "text/plain",
  ".c"            =>      "text/plain",
  ".cpp"          =>      "text/plain",
  ".log"          =>      "text/plain",
  ".conf"         =>      "text/plain",
  ".text"         =>      "text/plain",
  ".txt"          =>      "text/plain",
  ".dtd"          =>      "text/xml",
  ".xml"          =>      "text/xml",
  ".mpeg"         =>      "video/mpeg",
  ".mpg"          =>      "video/mpeg",
  ".mov"          =>      "video/quicktime",
  ".qt"           =>      "video/quicktime",
  ".avi"          =>      "video/x-msvideo",
  ".asf"          =>      "video/x-ms-asf",
  ".asx"          =>      "video/x-ms-asf",
  ".wmv"          =>      "video/x-ms-wmv",
  ".bz2"          =>      "application/x-bzip",
  ".tbz"          =>      "application/x-bzip-compressed-tar",
  ".tar.bz2"      =>      "application/x-bzip-compressed-tar",
  # default mime type
  ""              =>      "application/octet-stream",
 )

$HTTP["url"] =~ "\.pdf$" {
  server.range-requests = "disable"
}

# Configuración de nuestros VHOST VIRTUALES ######################
# También podemos crear un archivo vhost.conf e incluirlo con la directiva: include "vhosts.conf"
$HTTP["host"] == "estaticos.midominio.com" {
  server.document-root = "/var/www/vhosts/midominio.com/httpdocs/estaticos/"
}

5. Reconfigurar Apache para que no escuche en todas las ips (Opcional)

En caso de que tengamos instalado Apache, debemos reconfigurarlo para que no escuche en la ip que hayamos usado para Lighttpd, una vez realizado, debemos reiniciar Apache.

El archivo de configuración de Apache se encuentra generalmente en /etc/httpd/conf/httpd.conf y la directiva de configuración es “Listen”.

Adicionalmente, en caso de tener instalado Plesk, recomiendo ejecutar el comando:

/usr/local/psa/admin/bin/websrvmng --remove-ip-address --ip-address=[ip_para_lighttpd]

Para quitar la ip de los archivos de configuración de plesk, de lo contrario, nos dará problemas al reiniciar apache.

Ojo, una vez hayamos hecho esto, cada vez que agregemos ips al servidor, tendremos que ir al archivo de configuración de apache para hacer que éste escuche también en la nueva ip.

6. Arrancar Lighttpd

/etc/init.d/lighttpd start

Con esto tan sólo debemos probar a acceder a algun archivo de nuestro vhost que acabamos de crear para dar por finalizada la instalación y configuración de Lighttpd.

11 Comentarios sobre “Instalación y configuración de Lighttpd”

  1. adrian Dice:

    no me funciono los comandos que tienes en esta pagina

  2. admin Dice:

    Hola adrian, ¿cual de ellos no te funcionó?.

    Ten en cuenta que los comandos dependen de la distribución de linux que estes utilizando, para el ejemplo se utilizó Centos 5. Si, por ejemplo, utilizas debian, ubuntu, etc… en lugar de yum, tienes que utilizar apt-get o aptitude.

    Por otro lado asegúrate de que tienes instalado el gcc gcc++, etc.

    Si quieres, dame más información e intento echarte una mano.

    ¡Saludos!.

  3. Loana Dice:

    Gracias por tu ayuda!

  4. Dani Dice:

    Hola Loana,
    Quisiera hacer lo mismo que estas tú haciendo.. pero sin tener que disponer de una nueva IP. El filtro en el que tú le dices al Apache que no escuche una ip en concreto para que así trabaje el lighttpd… no se podría hacer que fuera que no escuchara cuando venga por un subdominio en concreto ? por ejemplo de static.midominio.com ? Gracias por el magnifico post.

  5. admin Dice:

    Hola Dani.

    No se puede hacer lo que comentas, 2 servicios no pueden escuchar simultaneamente en el mismo puerto de la misma ip.

    Lo único que podrias hacer para no necesitar 2 ips es configurar lighttp para que escuche en otro puerto de la misma ip que usa apache, por ejemplo en el 8080, de esta forma, cargarias los estaticos de lighttp mediante http://www.midominio.com:8080 y los archivos de apache mediante http://www.midomino.com (se entiende en este último que es el puerto 80, por defecto).

    Aún así, yo te recomiendo usar 2 ips distintas.

    Saludos.

  6. Darking Dice:

    Hola Admin,

    Primeramente felicitarte por esta entrada, yo que no se mucho de esto de Linux me ha sido muy fácil y ya tengo mi sitio funcionando con poder de Lighty.

    Muchas Gracias

    Te quisiera hacer una consulta, como se ponen reglas para rewrite en el Lighttd? ya se que son diferentes a las de Apache y ya las tengo las compatibles pero no se en que parte del config se ponen.

    Muchas Gracias nuevamente!

  7. admin Dice:

    Hola Darking:

    Es muy sencillo, primero debes activar el módulo de rewrite en la directiva server.modules, una vez hecho, podrás agregar reglas en cualquier punto de la configuración, aunque lo más lógico es hacerlo dentro de la sección de cada host virtual que hayas configurado, según nuestro ejemplo sería algo así como esto:

    $HTTP["host"] == “estaticos.midominio.com” {
    server.document-root = “/var/www/vhosts/midominio.com/httpdocs/estaticos/”
    url.rewrite-once = ( “^/id/([0-9]+)$” => “/index.php?id=$1″ )
    }

    La directiva url.rewrite permite un array, por lo que puedes poner todas tus reglas ahí separándolas por comas:

    $HTTP["host"] == “estaticos.midominio.com” {
    server.document-root = “/var/www/vhosts/midominio.com/httpdocs/estaticos/”
    url.rewrite-once = (
    “^/id/([0-9]+)$” => “/index.php?id=$1″,
    “^/ver-noticia/([0-9]+)$” => “/news.php?id=$1″
    )
    }

    Espero haberte sido de ayuda.

  8. qu1ll3er0 Dice:

    Acabo de instalar un servidor Lighttpd pero deseo que este escuche las peticiones seguras en un puerto y las no seguras en otro puerto, ¿que parametro debo modificar?

  9. admin Dice:

    Hola:

    Lighttpd solo puede servir http o https, no puede servir a la vez, pero lo que si puedes hacer es correr dos servicios (uno ssl y otro no ssl) de forma simultánea en diferentes puertos.

    Aquí te paso unas referencias, espero que te sean de utilidad.

    ¿Cómo configurar Lighttpd + SSL?:
    http://redmine.lighttpd.net/wiki/lighttpd/Docs:SSL

    ¿Cómo configurar 2 servicios de Lighttpd simultáneos?:
    http://wiki.archlinux.org/index.php/Lighttpd_For_Both_SSL_And_Non-SSL

    Saludos.

  10. Matias Dice:

    Hola buenos dias :

    Aver si por favor me pueden hechar una mano para ver si resuelvo una duda que me tiene ya desde hace tiempo de los nervios .

    Eh instalado el lighttp , bien funciona , quiero direcionar para que se me vean las webs en las cuentas que sean en la carpeta www (o public_html) . No se si me explico bien ya que soy very noob , es que tengas una cuenta (una shell) y al crear la carpeta www (o public_html) al meter las html en esa carpetea , se vean :

    http://laip/index.html
    o
    http://laip/~index.html

    No sé si me explico bien pero perdonarme , entiendo lo justo.

    Saludos y gracias por estas ayudas , aver si puedo corregir esa duda que tengo .

  11. admin Dice:

    Matias, no he entendido prácticamente nada de tu comentario. Intenta explicarte mejor por favor.

    ¿Quieres que cada usuario tenga un directorio www con páginas html?.

    Si ese es el caso tienes varias formas de hacerlo.

    1) Creando hosts virtuales por cada usuario y definiendo su /home/[usuario]/www como document-root de cada host virtual

    2) Creando un cron que copie o sincronize perióducamente todos los directorios /home/[usuario]/www al document-root del lighttpd

    3) Con links simbólicos. Bien desde los directorios www de cada usuario hacia el document-root o viceversa.

¿Tienes dudas, preguntas o comentarios?.

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Iniciar sesión