Lighttpd, servidor web ligero

Enviado por cnicolas el 24 Enero, 2010 - 12:16.

Dentro de la diversidad que existe a la hora de elegir e instalar un servidor web, uno de los que sobresale por su ligereza y facilidad de configuracion es lightttpd comunmente conocido como ligthy, esta licenciado con licencia BSD, su ligereza y buen rendimiento es lo que ha hecho que youtube o wikipedia que tienen una enorme cantidad de conexiones hayn decidio usarlo en sus servidores.
Su instalacion en debian es bien sencilla , basta con ejecutar como root

#aptitude install lighttpd

Por defecto nos crea un fichero de configuracion en /etc/lighttpd llamado lighttpd.conf .
igualmente en /usr/sbin se encuentra el ejecutable lighttpd .
Ahora bien para añadirle algo mas de funcionalidad al servidor que por defecto solo sirve paginas html es bastante sencillo y facil añadir un lenguaje con la potencia de php, para ello debemos añadir php-cgi, para elo algo tan simple como

#aptitude install php5-cgi

Ahora debemos modificar nuestro fichero lighttpd.conf para añadir al servidor la posibilidad de servir php. El resultado es el siguiente

# 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_rewrite",
#           "mod_redirect",
#           "mod_evhost",
#           "mod_usertrack",
#           "mod_rrdtool",
#           "mod_webdav",
#           "mod_expire",
#           "mod_flv_streaming",
#           "mod_evasive"
"mod_fastcgi"
)

## a static document-root, for virtual-hosting take look at the
## server.virtual-* options
server.document-root       = "/var/www/"

## where to upload files to, purged daily.
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )

## 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 #######

## Use ipv6 only if available. (disabled for while, check #560837)
include_shell "/usr/share/lighttpd/use-ipv6.pl"

## 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: <errorfile-prefix><status>.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 <uid> (default: don't care)
server.username            = "www-data"

## change uid to <uid> (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")

#### 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"

#### 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")

fastcgi.server= (  ".php" => ((  
"bin-path" => "/usr/bin/php-cgi",
"socket" =>"/tmp/php.socket"
)))
#### 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"

#### handle Debian Policy Manual, Section 11.5. urls
## by default allow them only from localhost
## (This must come last due to #445459)
## Note: =~ "127.0.0.1" works with ipv6 enabled, whereas == "127.0.0.1" doesn't
$HTTP["remoteip"] =~ "127.0.0.1" {
alias.url += (
"/doc/" => "/usr/share/doc/",
"/images/" => "/usr/share/images/"
)
$HTTP["url"] =~ "^/doc/|^/images/" {
dir-listing.activate = "enable"
}
}

Ya solo nos queda reiniciar nuestro servidor con

# lighttpd restart

Existen opciones como crear un fichero de configuracion en un directorio diferente e indicarle al ejecutable que use ese fichero con la opcion -f por poner un ejemplo

En resumen la configuracion del servidor es bien sencilla, bastante mas facil que por ejemplo apache y a la par que cherokee.
Las pruebas que he visto de benchmark de comparacion de estos dos servidores son favorables a lighty cuando el numero de conexiones es elevadas.

Mas informacion

Imagen de toniusco
Enviado por toniusco el 24 Enero, 2010 - 13:41.

En debian y sistemas basados en debian no hace falta modificar el fichero /etc/lighttpd/lighttpd.conf para agregar la configuración de php.

Tan solo hay que habilitarlo que se puede hacer de 2 formas.

a) Creando un enlace simbólico de /etc/lighttpd/conf-available/10-fastcgi.conf -> /etc/lighttpd/conf-enabled/10-fastcgi.conf

b) Usando el comando: lighty-enable-mod fastcgi

Nota: En algunos sistemas en vez de fastcgi hay que poner fcgi.

Un saludo Cnicolas y excelente articulo.

pd: te invito a que pruebes cherokee y hiawatha

Imagen de cnicolas
Enviado por cnicolas el 24 Enero, 2010 - 16:40.
toniusco escribió:

En debian y sistemas basados en debian no hace falta modificar el fichero /etc/lighttpd/lighttpd.conf para agregar la configuración de php.

Tan solo hay que habilitarlo que se puede hacer de 2 formas.

a) Creando un enlace simbólico de /etc/lighttpd/conf-available/10-fastcgi.conf -> /etc/lighttpd/conf-enabled/10-fastcgi.conf

b) Usando el comando: lighty-enable-mod fastcgi

Nota: En algunos sistemas en vez de fastcgi hay que poner fcgi.

Un saludo Cnicolas y excelente articulo.

pd: te invito a que pruebes cherokee y hiawatha

Gracias por la informacion, desconocia que se podia hacer con un comando, aunque soy de los que le gusta tocar el fichero de configuración editandolo para asi saber su estructura.
Sobre cherokee ya escribi un par de articulos en el blog, es un servidor que me gusta bastante, sobre hiawatha no te puedo decir nada lo desconocia, intentare leer algo sobre el.

Imagen de franky32
Enviado por franky32 el 25 Enero, 2010 - 09:22.

Me ha parecido una gran entrada de blog. Aunque yo estoy bastante verde en el tema de los servidores entre otras cosas porque uso un laptop y no me aparece adecuado un laptop para tal menester sin contar el mantenimiento y actualización de una web.

Sí un día monto un servidor prescindiré de xampp y probaré éste.

Saludos.

Imagen de cnicolas
Enviado por cnicolas el 25 Enero, 2010 - 09:36.

Una cosa que me parece curiosa de la documentacion es que distingue segun el tiempo que tengas para dedicar a la configuracion
http://redmine.lighttpd.net/projects/lighttpd/wiki/TutorialConfiguration
Ademas creo que la documentacion oficial de este servidor es bastante buena.

Imagen de gomalaca
Enviado por gomalaca el 28 Enero, 2010 - 00:13.

Estuve un tiempo dándole vueltas a lighttpd, y es una de táaaaantas cosas que tengo por hacer. Pero me surge la siguiente duda. Para un neófito como yo, que en su vida a montado un servidor web, de hacerlo que sería más recomendable, ¿empezar con apache por ser por así decirlo el estándar de facto o probar algo como lighttpd?. Mi "servidor" es un intel atom de doble núcleo y el acceso a la web sería para cuatro gatos y un perro mrgreen .

Imagen de arctica
Enviado por arctica el 28 Enero, 2010 - 00:20.
gomalaca escribió:

Estuve un tiempo dándole vueltas a lighttpd, y es una de táaaaantas cosas que tengo por hacer. Pero me surge la siguiente duda. Para un neófito como yo, que en su vida a montado un servidor web, de hacerlo que sería más recomendable, ¿empezar con apache por ser por así decirlo el estándar de facto o probar algo como lighttpd?. Mi "servidor" es un intel atom de doble núcleo y el acceso a la web sería para cuatro gatos y un perro mrgreen .

Si me permites mi opinión, yo que también puedo considerarme bastante neófita, te recomiendo lighttpd. No es para nada complicado y hay mucha y muy buena documentación. De verdad, es muy sencillo.

:)

edito: además, el logo mola un montón mrgreen

Imagen de Aguila Rabuda
Enviado por Aguila Rabuda el 28 Enero, 2010 - 00:27.

Yo empecé con apache, pero instalé y probé lighthttpd y me parece infinitamente más fácil. No sé, es la sensación que he tenido. A parte de que va como un rayo en un servidor con hardware modesto.

Saludos!

PD: Muy buena entrada cnicolas wink

Imagen de gomalaca
Enviado por gomalaca el 28 Enero, 2010 - 00:32.
arctica escribió:

Si me permites mi opinión, yo que también puedo considerarme bastante neófita, te recomiendo lighttpd. No es para nada complicado y hay mucha y muy buena documentación. De verdad, es muy sencillo.

:)

Gracias arctica :), es que le doy vueltas pues como uno aprende estas cosas a base de h****** y dispone del tiempo del que dispone, pienso si no sería mejor la primera opción. Pero también tengo en cuenta mi máquina y mi conexión adsl (normalita, la de 1 Mb de Telefónica).

Imagen de cnicolas
Enviado por cnicolas el 28 Enero, 2010 - 06:36.

Pues lighttpd es bastante mas sencillo de configurar e instalar que apache, tambien cherokee es un servidor que me gusta.
No se si conoceis el proyecto XAMPP que te instala apache con mysql, php y perl todo a la vez y ya configurado, personalmente no me gusta, prefiero hacerlo por mi mismo configurando yo mismo las rutas pero es bastante usual.
Gomalaca con tu maquina no vas a tener problemas con ninguno de estos servidores, pero el mas facil de configurar es lighttp y en su pagina web hay bastante informacion, ademas siempre te podemos echar una mano.

Imagen de arctica
Enviado por arctica el 28 Enero, 2010 - 06:43.
cnicolas escribió:

No se si conoceis el proyecto XAMPP que te instala apache con mysql, php y perl todo a la vez y ya configurado, personalemente no me gusta, perfiero hacerlo por mi mismo configurando yo mismo las rutas pero es bastante usual.

Sí señor, opino como tú. Hace unos meses di un curso sobre eso y yo pensaba para mí misma... "pues a mí no me gusta esta forma..." xDD