Tabla de contenido


1.- Introduccion

Lighttpd es un servidor web para los sistemas operativos Unix/Linux y Microsoft Windows. Este servidor tambien conocido como Lighty, es una alternativa para el servidor de paginas web Apache.

Esta dise�ado para ser seguro, rapido (muy rapido a decir verdad), compatible con los estandars y flexible a la vez que 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), una ligera carga en el CPU y su enfoque en velocidad hacen de lighttpd perfecto para servidores con demasiada carga.

2.- Instalacion sobre Debian

Para instalar lighttpd, tecleamos, como root:

deathbian:~# aptitude install lighttpd

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

3.- Configuracion Basica

La instalacion 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

3.1.- Configurando las Directivas basicas de 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 en Debian 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 caracter�stica 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 configurar de 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

4.- 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 http://127.0.0.1/

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

Popularity: 55% [?]