Lighttpd: Instalacion y configuracion del web server para Linux Debian, Mint y Ubuntu

13 Comments

Introduccion

Lighttpd es un servidor web para los sistemas operativos Unix, Linux y Microsoft Windows. La instalacion de este servidor tambien conocido como Lighty, es una alternativa muy flexible para el servidor de paginas web Apache o Internet Information Services.

Este web server diseñado para ser seguro, rapido (muy rapido a decir verdad), compatible con los estandares y flexible a la vez esta optimizado para entornos en los cuales la velocidad es critica. Su huella de memoria es muy pequeña (en comparacion a otros servidores web; como apache o IIS), una ligera carga en el CPU y su enfoque en velocidad hacen de lighttpd perfecto para servidores con demasiada carga.

Instalacion de lighttpd sobre Debian, Linux Mint, Ubuntu

La instalacion del web server en Linux es muy sencilla. Para instalar lighttpd en linux, tecleamos como root:

deathbian:~# aptitude install lighttpd

Nota: Sobre Debian Lenny, lighttpd corre con el usuario www-data, y no lighttpd.

Configuracion Basica del web server

La instalacion del web server en Debian nos proporciona los archivos de configuracion y arranque de Lighty, pero si necesitan unos ejemplos

archivo: /etc/lighttpd/lighttpd.conf
# Debian lighttpd configuration file
#

############ Options you really have to take care of ####################

## modules to load
# mod_access, mod_accesslog and mod_alias are loaded by default
# all other module should only be loaded if neccesary
# - saves some time
# - saves memory

server.modules              = (
            "mod_access",
            "mod_alias",
            "mod_accesslog",
            "mod_compress",
            "mod_fastcgi",
#           "mod_rewrite",
#           "mod_redirect",
#           "mod_status",
#           "mod_evhost",
#           "mod_usertrack",
#           "mod_rrdtool",
#           "mod_webdav",
#           "mod_expire",
#           "mod_flv_streaming",
#           "mod_evasive"
 )

fastcgi.server = ( ".php" => ((
                    "bin-path" => "/usr/bin/php-cgi",
                    "socket" => "/tmp/php.socket"
                 )))
## a static document-root, for virtual-hosting take look at the
## server.virtual-* options
server.document-root       = "/var/www/"

## where to send error-messages to
server.errorlog            = "/var/log/lighttpd/error.log"

## files to check for if .../ is requested
index-file.names           = ( "index.php", "index.html",
                               "index.htm", "default.htm",
                               "index.lighttpd.html" )

## Use the "Content-Type" extended attribute to obtain mime type if possible
# mimetype.use-xattr = "enable"

#### accesslog module
accesslog.filename         = "/var/log/lighttpd/access.log"
## deny access the file-extensions
#
# ~    is for backupfiles from vi, emacs, joe, ...
# .inc is often used for code includes which should in general not be part
#      of the document-root
url.access-deny            = ( "~", ".inc" )

##
# which extensions should not be handle via static-file transfer
#
# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

######### Options that are good to be but not neccesary to be changed #######

## bind to port (default: 80)
# server.port               = 81

## bind to localhost only (default: all interfaces)
## server.bind                = "localhost"

## error-handler for status 404
#server.error-handler-404  = "/error-handler.html"
#server.error-handler-404  = "/error-handler.php"

## to help the rc.scripts
server.pid-file            = "/var/run/lighttpd.pid"

##
## Format: .html
## -> ..../status-404.html for 'File not found'
#server.errorfile-prefix    = "/var/www/"

## virtual directory listings
dir-listing.encoding        = "utf-8"
server.dir-listing          = "enable"

## send unhandled HTTP-header headers to error-log
#debug.dump-unknown-headers  = "enable"

### only root can use these options
#
# chroot() to directory (default: no chroot() )
#server.chroot            = "/"

## change uid to  (default: don't care)
server.username            = "www-data"

## change uid to  (default: don't care)
server.groupname           = "www-data"

#### compress module
compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ("text/plain", "text/html", "application/x-javascript", "text/css")

#### status module
# status.status-url = "/server-status"
# status.config-url = "/server-config"

#### url handling modules (rewrite, redirect, access)
# url.rewrite                 = ( "^/$"             => "/server-status" )
# url.redirect                = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )

#
# define a pattern for the host url finding
# %% => % sign
# %0 => domain name + tld
# %1 => tld
# %2 => domain name without tld
# %3 => subdomain 1 name
# %4 => subdomain 2 name
#
# evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"

#### expire module
# expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")

#### rrdtool
# rrdtool.binary = "/usr/bin/rrdtool"
# rrdtool.db-name = "/var/www/lighttpd.rrd"

#### handle Debian Policy Manual, Section 11.5. urls
#### and by default allow them only from localhost

$HTTP["remoteip"] == "127.0.0.1" {
        alias.url += (
                "/doc/" => "/usr/share/doc/",
                "/images/" => "/usr/share/images/"
        )
        $HTTP["url"] =~ "^/doc/|^/images/" {
                dir-listing.activate = "enable"
        }
}

#### variable usage:
## variable name without "." is auto prefixed by "var." and becomes "var.bar"
#bar = 1
#var.mystring = "foo"

## integer add
#bar += 1
## string concat, with integer cast as string, result: "www.foo1.com"
#server.name = "www." + mystring + var.bar + ".com"
## array merge
#index-file.names = (foo + ".php") + index-file.names
#index-file.names += (foo + ".php")

#### external configuration files
## mimetype mapping
include_shell "/usr/share/lighttpd/create-mime.assign.pl"

## load enabled configuration files,
## read /etc/lighttpd/conf-available/README first
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

$SERVER["socket"] == ":443" {
  ssl.engine = "enable"
  ssl.pemfile = "/etc/ssl/certs/lighttpd.pem"
}

Con lighty instalado y funcionando correctamente ya no vamos a utilizar Apache 1.3/2.x, asi que mejor lo removemos del sistema (Recuerden sacar backup de los datos y archivos de configuracion de apache), tecleando:

deathbian:~# aptitude remove apache2

Configurando las Directivas basicas del web server lighttpd

  • server.document-root = /var/www/html/ Especifica el directorio por default para los sitios.
  • server.port = 80 Especifica el puerto por default del servidor.
  • server.username = www-data Usuario de Linux, ya sea Debian, Ubuntu, Mint u distro derivada sobre el cual corre lighty.
  • server.groupname = www-data Especifica el nombre de usuario y grupo con los cuales arranca/detiene el demonio del servidor lighttpd. Esta es una caracterstica de seguridad, asi de esta manera no corre con los privilegios de root.
  • server.bind = server-ip-address Especifica la direccion ip del servidor. Asi mismo tambien es posible ingresar un hostname o localhost.
  • server.tag =lighttpd Se utiliza para asignar el nombre y el numero de version de lighttpd (default). Esta es una caracteristica de seguridad. Se puede configurarde esta manera:
    server.tag ="Mi servidor web v1.0"

    Nota: Este es el nombre que reporta el servidor en su cabecera de respuesta. Se puede comprobar utilizando netcraft.

  • server.errorlog = /var/log/lighttpd/error.log Especifica el archivo de bitacora de error.
  • accesslog.filename = /var/log/lighttpd
  • Especifica el archivo de bitacora de accesos, el cual puede ser utilizado por una aplicacion de estadisticas de visitantes como webalizer.
  • index-file.names = ( index.php, index.html ) Un listado de los archivos por omision en cada directorio.
  • server.modules = (
    mod_access,
    mod_accesslog,
    mod_fastcgi,
    mod_rewrite,
    mod_auth
    ):
  • Los modulos anteriormente descritos seran los unicos que cargara lighty. Claro que se pueden agregar mas. De aqui el secreto de la rapidez y bajo consumo de memoria del servidor, veamos una descripcion mas detallada:
    • mod_access: El modulo de acceso es utilizado para denegar acceso a ciertos archivos.
    • mod_accesslog: Utilizado para escribir la bitacora CLF, flexible como apache.
    • mod_fastcgi: Soporte FastCGI para perl/PHP etc.
    • mod_rewrite: Necesario para re-escribir Url’s SEO compatibles.
    • mod_auth: Autenticacion, usualmente para directorios protegidos por contrase�a.

mimetype.assign = (
.pdf => application/pdf,
.sig => application/pgp-signature
): Se utiliza para asignar el mapeo del mimetype.

Editemos el archivo /etc/lighttpd/lighttpd.conf y configuren todas las directivas descritas anteriormente.

deathbian:~# vim /etc/lighttpd/lighttpd.conf

Comprobacion del servicio web

Ya que todo esta configurado a nuestras necesidades, grabamos el archivo y arrancamos el demonio lighttpd:

deathbian:~# /etc/init.d/lighttpd start

Si deseamos verificar cuales servicios estan corriendo y en cual puerto, para comprobar el exito de nuestra instalacion de lighttpd, tecleamos:

deathbian:~# 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     2522/mysqld
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     2151/portmap
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2720/lighttpd
tcp        0      0 0.0.0.0:113             0.0.0.0:*               LISTEN     2742/inetd
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN     2927/tcpsvd
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN     2720/lighttpd
tcp        0      0 127.0.0.1:831           0.0.0.0:*               LISTEN     2775/famd
tcp6       0      0 :::22                   :::*                    LISTEN     2444/sshd
udp        0      0 0.0.0.0:32768           0.0.0.0:*                          2432/lwresd
udp        0      0 0.0.0.0:32770           0.0.0.0:*                          2793/avahi-daemon:
udp        0      0 0.0.0.0:517             0.0.0.0:*                          2742/inetd
udp        0      0 0.0.0.0:518             0.0.0.0:*                          2742/inetd
udp        0      0 127.0.0.1:921           0.0.0.0:*                          2432/lwresd
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          2793/avahi-daemon:
udp        0      0 0.0.0.0:111             0.0.0.0:*                          2151/portmap
udp6       0      0 :::32769                :::*                               2432/lwresd

Ahora vamos al navegador, ya sea firefox o internet explorer y verifiquemos que nuestro nuevo sitio sea accesible via web, tecleamos en la barra de direcciones del navegador
http://localhost/ o

Palabras Finales

Por experiencia personal, les puedo asegurar que el performance de apache es muy inferior frente a lighttp.

Lighty puede ser muy joven (en comparacion a otros sistemas de servidores web), su desarrollo buscar responder a la realidad de nuestros dias, el la cual la web2.0 requiere mayor performance para sitios con miles de visitantes a diario.

En los proximos dias publicaremos temas como;

Optimizando el servidor web lighttpd

  • Configurando FastCGI PHP sobre lighttpd
  • Configuracion del hosting virtual sobre lighttpd
  • Compilar y optimizar los scripts de php sobre lighttpd con php eAccelerator
  • Resolver problemas con el cache de eAccelerator

Fortaleciendo la seguridad de Lighttpd

  • Seguridad del servidor web extrema: Configurar Lighttpd, php, perl, MySQL con soporte para un entorno de sistema de archivos virtual (chrooted jail)
  • Configuracion SSL
  • Crear y utilizar nuestro propio certificado SSL en lighttpd
  • Proteger con contrase;a los directorios

Configuracion miscelanea de Lighttpd

  • Instalar y configurar las estadisticas de Webalizer para lighttpd
  • URLs SEO compatibles para wordpress con lighttpd
  • Denegar los enlaces directos o el robo de imagenes (leeching) con lighttpd

Monitoreo del servidor Lighttpd

  • Monitorear y reiniciar el servicio lighttpd cuando este se cuelge.

Via | Lighttpd sitio web oficial

13 Replies to “Lighttpd: Instalacion y configuracion del web server para Linux Debian, Mint y Ubuntu”

  1. Hola , llegué tarde ?
    Bueno aver si me pueden ayudar , como puedo poner el lighttpd para que en cuentas sobre debian (shells) se pongan las webs en www o public_html y se puedan ver en distintas cuentas .

    Saludos y Gracias

  2. Muchas gracias por el tutorial. Tengo una pregunta que no logro resolver por muchas guias que lea. Necesito que al entrar en mi web, cuando pregunto usuario y password mediante auth.module, el usuario no aparezca o aparezca ya uno prefijado.
    Por ejemplo, si sale el pop-up user: password: me gustaria que apareciese
    asi

    user:admin #por ejemplo
    password: #en blanco

    o solo

    password: #en blanco

    gracias!

  3. puedes ayudarme a configurar lighttpd para django????
    mi caso es:
    tengo creado mi proyecto “ooo” en home/ecoia/django_projects/

    pero no puedo hacerlocorrer en lighttpd

    …owen

  4. Saludos..

    cual seria la configuracion adecudad para que cada virtualhost tenga su propio error.log y access.log, con la finalidad de llevar las estadisticas de cada virtual.

    la configuracion por default no me permite tener es configruacion!

  5. Buenas muchachos, tengo el siguiente problemita/problemon
    Tengo instalado Ruby on Rails , el tema que he instalado por apt-get el lighttpd pero cuando veo los mod que cargan, ohhh caramba no esta el de mod_fastcgi
    Porque pasa esto?? como lo soluciono??, es que si no me tira error y no puedo levantarla para entrar desde afuera

    Saludos, Poli

    1. @Poli: En el archivo /etc/lighttpd/lighttpd.conf buscas la opcion de server.modules y descomentas (borrar el #) la linea que se lee “mod_fastcgi”, y asi ya estara habilitado.

      Saludos

  6. Maestro tenes documentacion para hacerlo andar con perl quiero instalar bugzilla y me ta jorobando un toq.. gracias

Deja tus preguntas o comentarios