Difference between revisions of "Lighttpd (Español)"

From ArchWiki
Jump to: navigation, search
(Configuración: added Habilitar https con SSL section)
(Configuración: added Auto firmado section)
Line 55: Line 55:
 
* Mozilla tiene un [https://mozilla.github.io/server-side-tls/ssl-config-generator/ generador de configuracion] que puede ser usado con lighttpd.
 
* Mozilla tiene un [https://mozilla.github.io/server-side-tls/ssl-config-generator/ generador de configuracion] que puede ser usado con lighttpd.
 
* Despues de configurar SSL, puede [https://www.ssllabs.com/ssltest/index.html verificar su configuracion] con el servicio de Qualys SSL Labs.}}
 
* Despues de configurar SSL, puede [https://www.ssllabs.com/ssltest/index.html verificar su configuracion] con el servicio de Qualys SSL Labs.}}
 +
 +
===== Auto firmado =====
 +
 +
Certificados de SSL que son auto firmados pueden ser generados, asumiendo el paquete {{Pkg|openssl}} esta instalado, de la siguiente manera:
 +
 +
# mkdir /etc/lighttpd/certs
 +
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -sha256 -keyout /etc/lighttpd/certs/server.pem -out /etc/lighttpd/certs/server.pem
 +
# chmod 600 /etc/lighttpd/certs/server.pem
 +
 +
Modifique el archivo {{ic|/etc/lighttpd/lighttpd.conf}} para habilitar https:
 +
 +
$SERVER["socket"] == ":443" {
 +
    ssl.engine                  = "enable"
 +
    ssl.pemfile                = "/etc/lighttpd/certs/server.pem"
 +
  }
  
 
=== CGI ===
 
=== CGI ===

Revision as of 10:53, 9 November 2018

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: Este artículo está desactualizado. (Discuss in Talk:Lighttpd (Español)#)

Lighttpd es un servidor web "seguro, rápido, compatible y muy flexible" que ha sido optimizado para ambientes de alto rendimiento. Consume muy pocos recursos comparado con otros servidores web y se ocupa de balancear el CPU. Sus características avanzadas (FastCGI, CGI, Auth, entre otras) hacen que lighttpd sea el servidor web perfecto para todos aquellos que sufren problemas de balanceo."

Instalación

Instale el paquete lighttpd.

Configuración

Sistema básico

EL archivo de configuración de lighttpd es: /etc/lighttpd/lighttpd.conf. Por defecto debe producir una pagina de prueba.

Para comprobar su lighttpd.conf por bugs se puede usar el siguiente comando, que ayuda a encontrar errores en la configuración rápidamente:

$ lighttpd -t -f /etc/lighttpd/lighttpd.conf

Otra prueba mucho mas estricta puede ser ejecutada con:

$ lighttpd -tt -f /etc/lighttpd/lighttpd.conf

El archivo de la configuración por defecto especifica que el directorio /srv/http/ es la base de los documentos servidos. Para comprobar la instalación, cree un archivo de prueba:

/srv/http/index.html
Hola Mundo!

Después active la unidad lighttpd.service y en su navegador diríjase a localhost, donde debería ver la pagina de prueba.

Archivos de configuración con ejemplos están disponibles en /usr/share/doc/lighttpd/.

Historial básico

Lighttpd puede escribir archivos con historiales de acceso y de errores. Para habilitar ambas opciones edite el archivo /etc/lighttpd/lighttpd.conf:

server.modules += (
   "mod_access",
   "mod_accesslog",
)

server.errorlog   = "/var/log/lighttpd/errores.log"
accesslog.filename = "/var/log/lighttpd/accesos.log"

Habilitar https con SSL

Advertencia: Usuarios que planean implementar SSL/TLS, deben saber que algunas variaciones e implementaciones son vulnerables a ataques. Vease el articulo de OpenSSL para mas detalles.
Sugerencia:
Auto firmado

Certificados de SSL que son auto firmados pueden ser generados, asumiendo el paquete openssl esta instalado, de la siguiente manera:

# mkdir /etc/lighttpd/certs
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -sha256 -keyout /etc/lighttpd/certs/server.pem -out /etc/lighttpd/certs/server.pem
# chmod 600 /etc/lighttpd/certs/server.pem

Modifique el archivo /etc/lighttpd/lighttpd.conf para habilitar https:

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

CGI

Interfaz de entrada común (Common Gateway Interface, CGI en ingles) funciona automáticamente con lighttpd, solo es necesario habilitar el modulo, incluir el archivo de configuración y asegurarse que su lenguaje interprete esta instalado. Por ejemplo python o ruby.

Cree el archivo /etc/lighttpd/conf.d/cgi.conf y agregue lo siguiente:

server.modules += ( "mod_cgi" )

cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
                               ".cgi" => "/usr/bin/perl",
                               ".rb"  => "/usr/bin/ruby",
                               ".erb" => "/usr/bin/eruby",
                               ".py"  => "/usr/bin/python",
                               ".php" => "/usr/bin/php-cgi" )

index-file.names           += ( "index.pl",   "default.pl",
                               "index.rb",   "default.rb",
                               "index.erb",  "default.erb",
                               "index.py",   "default.py",
                               "index.php",  "default.php" )

Para scripts de PHP debe asegurarse que la siguiente opción se encuentra en /etc/php/php.ini:

cgi.fix_pathinfo = 1

En su archivo de configuración principal /etc/lighttpd/lighttpd.conf agregue:

include "conf.d/cgi.conf"

FastCGI

Instale el paquete fcgi. Ahora ya tiene lighttpd con soporte para fcgi. Si esto era todo lo que se deseaba.

Si se desea expandir con Ruby on Rails, PHP o Python deben leer las secciones siguientes.

Nota: El usuario/grupo por defecto de lighttpd es http.

En primer lugar copie la configuración que provee lighttpd de /usr/share/doc/lighttpd/config/conf.d/fastcgi.conf a /etc/lighttpd/conf.d.

Agregue lo siguiente al archivo de configuración /etc/lighttpd/conf.d/fastcgi.conf:

server.modules += ( "mod_fastcgi" )

#server.indexfiles += ( "dispatch.fcgi" )      # Opcion obsoleta
index-file.names += ( "dispatch.fcgi" )        # dispatch.fcgi si Rails se especifica

server.error-handler-404   = "/dispatch.fcgi"  # tambien
fastcgi.server = (
    ".fcgi" => (
      "localhost" => ( 
        "socket" => "/run/lighttpd/rails-fastcgi.sock",
        "bin-path" => "/path/to/rails/application/public/dispatch.fcgi"
      )
    )
)

Incluya esta linea en su archivo de configuracion principal /etc/lighttpd/lighttpd.conf:

include "conf.d/fastcgi.conf"

PHP

Uso php-cgi

Instale php y php-cgi, véase también PHP y LAMP.

Asegúrese que php-cgi funciona ejecutando el comando php-cgi --version

PHP 5.4.3 (cgi-fcgi) (built: May  8 2012 17:10:17)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

Si tiene un resultado similar, quiere decir que PHP fue instalado correctamente.

Cree un archivo de configuración:

/etc/lighttpd/conf.d/fastcgi.conf

# Asegurese de instalar php and php-cgi. Véase:                                                             
# https://wiki.archlinux.org/index.php/Lighttpd_(Español)#PHP

server.modules += ("mod_fastcgi")

# Servidor FCGI
# =============
#
# Configuración de un servidor FastCGI con resolución de PHP.
#
index-file.names += ("index.php")
fastcgi.server = ( 
    # Balancear peticiones para esta ruta..
    ".php" => (
        # ... dentro de los siguientes servidores FastCGI. El nombre de cada
        # servidor es una etiqueta para identificarlo en el historial.
        "localhost" => ( 
            "bin-path" => "/usr/bin/php-cgi",
            "socket" => "/tmp/php-fastcgi.sock",
            "broken-scriptfilename" => "enable",
            "max-procs" => 4,                     # Valor por defecto
            "bin-environment" => (
                "PHP_FCGI_CHILDREN" => "1"        # Valor por defecto
            )
        )
    )   
)

Asegúrese que lighttpd use el archivo anterior agregando la siguiente linea a su archivo de configuración principal:

/etc/lighttpd/lighttpd.conf
include "conf.d/fastcgi.conf"
Nota: recuerde que el orden en que los módulos se cargan es importante, una lista con el orden correcto esta en /usr/share/doc/lighttpd/config/modules.conf.

Recargue lighttpd.

Nota:
  • Si tiene errores de forma Archivo de entrada no encontrado (No input file found), puede tener varias explicaciones. Véase estas preguntas frecuentes por mas información.
  • Asegúrese que ningún otro modulo, por ejemplo mod_cgi, intentara manejar la extensión .php.
Uso php-fpm

En versiones recientes de lighttps no hay inicio adaptivo. Para manejo dinámico de procesos PHP es posible instalar php-fpm y luego activar e iniciar automáticamente la unidad php-fpm.service.

Nota: Es posible configurar el numero de servidores y otras opciones modificando el archivo /etc/php/php-fpm.conf. Mas detalles en la pagina web de php-fpm. Recuerde que al realizar cambios en /etc/php/php.ini es necesario reiniciar la unidad php-fpm.service.

En el archivo /etc/lighttpd/conf.d/fastcgi.conf agregue:

server.modules += ( "mod_fastcgi" )

index-file.names += ( "index.php" ) 

fastcgi.server = (
    ".php" => (
      "localhost" => ( 
        "socket" => "/run/php-fpm/php-fpm.sock",
        "broken-scriptfilename" => "enable"
      ))
)

Python FastCGI

Nota:
  • lighttpd soporta el protocolo WSGI de Python: HowToPythonWSGI.
  • El siguiente método no funcionara con Python 3, ya que la librería Flup solo esta disponible para Python 2. Si desea usar Python 3, refiérase a la sección #CGI.

Instale y configure FastCGI, véase la sección #FastCGI.

Instale python2-flupAUR.

Configure:

fastcgi.server = (
    ".py" =>
    (
        "python-fcgi" =>
        (
        "socket" => "/run/lighttpd/fastcgi.python.socket",
         "bin-path" => "test.py",
         "check-local" => "disable",
         "max-procs" => 1,
        )
    )
)

Ponga el archivo test.py en el directorio raíz de su servidor y no olvide permitir su ejecución: chmod +x test.py.

#!/usr/bin/env python2

def myapp(environ, start_response):
    print 'got request: %s' % environ
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['Hello World!']

if __name__ == '__main__':
    from flup.server.fcgi import WSGIServer
    WSGIServer(myapp).run()

Gracias a firecat53 por su explicación


Indicador del nombre del servidor

Para usar SNI (por sus siglas en ingles) simplemente ponga las directivas del archivo ssl.pemfile en los condicionales del servidor. Un ssl.pemfile es requerido por defecto.

$HTTP["host"] == "www.example.org" {
    ssl.pemfile = "/etc/lighttpd/certs/www.example.org.pem" 
}

$HTTP["host"] == "mail.example.org" {
    ssl.pemfile = "/etc/lighttpd/certs/mail.example.org.pem" 
}

Ruby on Rails

Considerando que también quieras usar Ruby on Rails, asumo que tu tienes ruby instalado, sino hazlo de la siguiente forma:

pacman -S ruby

Ahora necesitamos rubygems y ruby-fcgi. Revisa en AUR!.

Rubygems:

pacman -S rubygems

ruby-fcgi:

Si usas yaourt puedes hacer:

yaourt -S ruby-fcgi

En caso de que no uses yaourt ni ninguna herramienta para AUR:

wget https://aur.archlinux.org/packages/ruby-fcgi/ruby-fcgi/PKGBUILD
makepkg
pacman -U ruby-fcgi-*.pkg.tar.gz

Si todo salió bien deberiamos tener rubygems. Ahora vamos con rails!

gem install rails --include-dependencies
gem install fcgi --include-dependencies

Si esto falla, descarga fcgi y compílalo por ti mismo, de la siguiente forma.

$ wget http://fastcgi.com/dist/fcgi.tar.gz
$ tar zxvf fcgi.tar.gz
$ cd fcgi-2.4.0
$./configure
$ make
# make install

Y repite la instalación de gem.

Recuerda verificar si tienes mas de un fcgi.so de la siguiente forma:

find /usr -name fcgi.so

Si tienes dos o mas, borra el que no tiene "/site_ruby/" en el path.

Para documentación de como usar Ruby on Rails por favor consulta http://rubyonrails.org.

Links de Referencia

Lighttpd FAQ