Configuración del servidor web Nginx en Debian Jessie

Tutorial de configuración de Nginx en Debian.

Introduccción

Hace unos años era prácticamente indiscutible qué servidor web instalar cuando hablábamos de ofrecer un servicio web. Hoy en día tenemos que tener en cuenta, al menos, dos nombres a la hora de ofrecer un servicio mediante HTTP: Apache y Nginx.

Durante años Apache ha copado la lista de servidores web más usados que compartía con IIS (Microsoft) casi sin competencia. Sin embargo, actualmente esta lista se comparte con un tercer nombre que sirve un 35.1% de páginas web frente al 48.8% de Apache según W3techs.com. Este es el servidor web, proxy inverso y multiplataforma Nginx.

Es desarrollado por Igor Sysoev, un ruso que buscaba satisfacer las necesidades de varios sitios web de Rambler (portal y motor de búsqueda ruso), los cuales recibían unos 500 millones de peticiones al día en septiembre de 2008.

Su uso se viene implantando en grandes empresas de internet como partes de Facebook, Instagram, Dropbox, GitHub, Intel, Netflix, WordPress y algunas páginas web como por ejemplo As.com, Alt1040 y Techcrunch.com donde destaca por su alto rendimiento.

Fue lanzado en octubre de 2004, cuenta con la versión 1.13.5 en el momento de escribir estas líneas y es multiplataforma bajo licencia BSD simplificada.

Instalación del servidor web Nginx

Aunque también puede configurarse como proxy inverso y proxy para IMAP y POP3, nos centraremos en su uso y estudio como servidor HTTP o servidor web.

Su descarga está disponible desde su página web oficial de descargas en Nginx.org y también desde los repositorios de algunas de las distribuciones Unix.

En Debian Jessie está disponible el paquete de instalación con versión 1.6.2-5+deb8u4 desde los repositorios, por lo que procedemos a instalarlo con apt-get install nginx

Configuración básica del servidor web

La configuración inicial establece como página de inicio un index.html por defecto ubicado en /usr/share/nginx/html/
Página index.html por defecto de Nginx.

En el directorio /etc/nginx/ se encuentran su estructura de ficheros principal, mientras que en /etc/nginx/nginx.conf se encuentra la configuración principal de Nginx. Aquí establecemos las configuraciones generales para todos los hosts virtuales alojados en nuestro server.

Mientras, la configuración del Virtual Host de la página de prueba se encuentra en /etc/nginx/sites-available/default En él podemos ver por qué puerto está sirviendo, cuál es el directorio raíz o cómo se establecería la configuración para el soporte de SSL. Este archivo queda reflejado en sites-enabled a través de un enlace simbólico.

Directorio de configuración del servidor web Nginx.

Estructura del directorio /etc/nginx

En el directorio /etc/nginx/ existen cuatro subdirectorios, familiares para aquellas personas que hayan configurado Apache 2. Estos son los siguientes:

  • conf.d: Usado para la configuración de los sitios web. Todo archivo ubicado aquí y terminado con extensión .conf será leído al inicio del servicio Nginx, por lo que es importante asegurarse de que cumplen con su sintáxis.
  • sites-available: Directorio donde se puede almacenar los sitios disponibles. Nginx no utilizará los archivos ubicados en este directorio a no ser que estén enlazados con el directorio sites-enabled.
  • sites-enabled: En él se ubican, mediante enlaces simbólicos, los sitios activados. Estos enlaces simbólicos hacen referencia a ficheros ubicados en el directorio sites-available.
  • snippets: Contiene fragmentos de configuración que pueden ser incluidos en cualquier fichero de configuración de Nginx, mejorando así la administración de Nginx y previniendo fallos en sus configuraciones.

Configuración de un Virtual Hosting

El Virtual Hosting, alojamiento compartido o alojamiento virtual es un sistema que permite alojar varios nombres de dominios y varios sitios webs en un mismo servidor web. Esta característica también se permite en Apache 2.4, recibiendo el mismo nombre.

La configuración de los Virtual Host se almacenan en /etc/nginx/sites-available y son activados en el directorio /etc/nginx/sites-enabled.

Para realizar una nueva configuración de Virtual Host podemos hacerlo tomando como plantilla la configuración por defecto llamada default.

Tras quitar algunos comentarios con información o ejemplos irrelevantes este sería el fichero de configuración para servir una página web por el puerto 80 con el nombre de dominio www.EGZ.com.

Nginx no tiene las instrucciones a2ensite o a2dissite como Apache, que activan o desactivan un sitio web a través de enlaces simbólicos. Esto ha de hacerse con el comando de creación de enlaces simbólicos que en nuestro caso lo ejecuto así: ln -s /etc/nginx/sites-available/EGZ /etc/nginx/sites-enabled/

Igualmente borramos el enlace simbólico de default que se encuentra en /etc/nginx/sites-enabled/ para desactivar este sitio web.

A continuación, creamos el directorio /var/www/EGZ/ e introducimos en él un fichero index.html con un mensaje de bienvenida.

Por último, reiniciamos el servicio para que retome la nueva configuración service nginx restart y editamos nuestro fichero de resolución local para que sea accesible mediante www.EGZ.com.
Configuración Virtual Host en Nginx.

Autenticación y control de acceso en Nginx

Para hacer uso de los sistemas de autenticación y control de acceso en Nginx es necesario instalar el paquete apache2-utils. Esto nos proporcionará herramientas para generar las contraseñas cifradas que se usarán, así como los distintos métodos de autenticación.

Así que ejecutamos el comando apt-get install apache2-utils para la instalación de este conjunto de doce herramientas.

Luego creamos un nuevo archivo de nombre .htpasswd con las credenciales del usuario EvaristoGZ. La ejecución del comando es htpasswd -c /etc/nginx/.htpasswd EvaristoGZ para crear el nuevo fichero y htpasswd /etc/nginx/.htpasswd OtroUsuario sin -c para añadir otro usuario.

Posteriormente, accedemos a la edición del fichero Virtual Host correspondiente a www.EGZ.com que tiene como ruta /etc/nginx/sites-available/EGZ para insertar las líneas marcadas. Estas harán una autenticación básica a través del fichero creado.

Ya por último, reiniciamos el servicio de Nginx con service nginx restart y, desde un navegador web, accedemos a nuestro sitio web para comprobar el correcto funcionamiento de nuestro sistema de control de acceso y autenticación sobre Nginx.
Autenticación básica en servidor web Nginx.

Si consultamos el fichero de log /var/log/nginx/access.log vemos como se muestra los accesos con y sin credenciales. Se ve que se autentica o intenta autenticar con el usuario EvaristoGZ, que luego no se ingresa identificación (recarga de página con credenciales correctas) y también que se autentica o intenta autenticar con el usuario H4CK3R.

Log de accesos al servidor web de Nginx.

Resultado de las peticiones recibidas por el servidor web Nginx.

Este fichero de acceso mostrará aquellas credenciales que hayan sido insertadas, sin poder conocer si consiguió acceder correctamente a la página web protegida con contraseña o no. Para ello debemos consultarlo en el fichero /var/log/nginx/error.log que nos dará información sobre los intentos de inicio de sesión fallidos.

Un ejemplo del intento de acceso con H4CK3R que indica que no se encuentra en el fichero de credenciales.

Ejecución de scripts PHP

La ejecución de código PHP en Nginx se hace a través de PHP-FPM, un paquete que permite procesar aplicaciones en PHP en servidores Nginx.

Este paquete se encuentra en los repositorios de Debian, por lo que únicamente debemos ejecutar su instalación con apt-get install php4-fpm

Lo siguiente será generar una página con código PHP que nos muestre el correcto funcionamiento. Hemos decidido hacer uso de phpinfo(), que ejecutará código PHP y además nos mostrará gran cantidad de información sobre el PHP que esá instalado en el servidor (versión de PHP, extensiones, información del servidor…).

Para ello creamos un fichero info.php en /var/www/EGZ/ con el siguiente contenido:

Tras esto, si intentamos acceder a www.EGZ.com/index.php, además de pedirnos las credenciales de autenticación nos descargará el fichero index.php sin mostrarlo en nuestro navegador web. Esto se debe a que el servidor no está aún configurado para servir los archivos .php ni aunque reiniciemos ambos servicios.

Editamos el Virtual Host, en el que debemos incluir que, a partir de ahora, también obtenga como fichero a mostrar en raíz aquellos que se llamen index.php (línea 8) y la especificación de la configuración de fastcgi-php.conf que cargará mediante un snippet (línea 23).

Además, en el fichero /etc/php5/fpm/php.ini buscamos la línea cgi.fix_pathinfo para descomentarla y poner su valor a 0.

Finalizamos reiniciando el servidor web Nginx con service nginx restart y el procesador PHP con service php5-fpm restart

Configuración de PHP sobre Nginx en Debian Jessie.

Muestra de phpinfo() configurado y ejecutándose sobre Nginx en Debian Jessie.

Referencias:

Compartir es agradecer. Si te ha gustado... ¡compartélo!
Comparte con tus amigos










Enviar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.