Instalación básica del servidor Nginx en Linux

  Ya se ha explicado en su momento qué es un servidor de red y para qué sirve, ejemplos de servidores de red son Apache o Internet Information Services, de los que se ha hablado en esta bitácora en varias ocasiones.
  En la presente entrada se explicará qué es y cómo se instala otro servidor de red que, además, posee otras funciones de servidor muy particulares, se trata de Nginx (pronunciado en inglés “engine X”).
  Se trata de un servidor web/proxy inverso ligero de alto rendimiento y un proxy para protocolos de correo electrónico (IMAP/POP3).
  Es software libre y de código abierto, licenciado bajo la Licencia BSD simplificada; también existe una versión comercial distribuida bajo el nombre de Nginx Plus. Es multiplataforma, por lo que corre en sistemas tipo unix (GNU/Linux, BSD, Solaris, Mac OS X, etc.) y Windows.
  Para ejemplificar esta explicación se utilizará el sistema operativo Debian 9 (Stretch) y Nginx  1.14.

  Este servidor fue inicialmente desarrollado con el fin explícito de superar el rendimiento ofrecido por el servidor de red Apache.​ Sirviendo archivos estáticos, Nginx usa dramáticamente menos memoria que su antagonista, y puede manejar aproximadamente cuatro veces más solicitudes por segundo. Este aumento de rendimiento viene con un costo de disminuida flexibilidad, como por ejemplo la capacidad de anular las configuraciones de acceso del sistema por archivo (Apache logra esto con un archivo ".htaccess", mientras que Nginx no tiene desarrollada tal funcionalidad). Anteriormente, incorporar módulos de terceros en este servidor requería recompilar la aplicación fuente con los módulos enlazados estáticamente. Esto fue parcialmente superado en la versión 1.9.11 de Febrero de 2016, con la adición de carga dinámica de módulos. Sin embargo, los módulos aún deben ser compilados al mismo tiempo que Nginx, y no todos los módulos son compatibles con este sistema, puesto que algunos requieren el antiguo proceso de enlazado estático.
  Las funciones básicas que tiene este servidor son:
  •   Servidor de archivos estáticos y de índice o autoindexado.
  •   Aceleración de proxy inverso con almacenamiento en caché; equilibrio de carga y tolerancia a fallos.
  •   Soporte acelerado con el almacenamiento en caché de FastCGI, uwsgi, SCGI y servidores de memcached.
  •   Arquitectura modular, donde los filtros incluyen gzipping, rangos de bytes, respuestas fragmentadas, XSLT, SSI y filtro de transformación de imágenes.
  •   Soporte para SSL y TLS SIN.
  •   Soporte para HTTP / 2 con prioridad ponderada y basada en la dependencia.
  •   Servidores virtuales basados en nombres y basados en IP.
  •   Soporte para conexiones Keep-alive y pipeline.
  •   Acceso a los formatos de registro, escritura de registro almacenado, rotación rápida de registros y registro de Syslog.
  •   Redirección de códigos de error 3xx-5xx.
  •   Puede cambiar de URI usando expresiones regulares.
  •   Ejecuta diferentes funciones dependiendo de la dirección del cliente.
  •   Control de acceso basado en la dirección IP del cliente, por contraseña (autenticación básica HTTP) y por el resultado de la subrequest.
  •   Validación del referer HTTP.
  •   Admite los métodos PUT, DELETE, MKCOL, COPY y MOVE.
  •   Transmisión FLV y MP4.
  •   Límite de la tasa de respuesta.
  •  Limita la cantidad de conexiones o solicitudes simultáneas provenientes de una dirección.
  •   Geolocalización basada en IP.
  •   Admite Embedded Perl.
  En cuanto a sus funciones como servidor proxy de correo, Nginx posee las siguientes:
  •   Redirección del usuario a un servidor IMAP o POP3 haciendo uso de un servidor de autenticación HTTP externo.
  •   Autenticación de usuario utilizando un servidor de autenticación HTTP externo y una redirección de conexión a un servidor SMTP interno.
  •   Métodos de autenticación soportados: POP3: USER / PASS, APOP, AUTH LOGIN / PLAIN / CRAM-MD5, IMAP: INICIAR SESIÓN, AUTH LOGIN / PLAIN / CRAM-MD5, SMTP: AUTH LOGIN / PLAIN / CRAM-MD5.
  •   Soporte para SSL.
  •   STARTTLS y soporte de STLS.
  Finalmente, como servidor proxy genérico (TCP/UDP), este servidor posee las siguientes funcionalidades:
  • Proxying genérico de TCP y UDP.
  • Soporte SSL y TLS SNI para TCP.
  • Equilibrio de carga y tolerancia a fallos.
  • Control de acceso basado en la dirección del cliente.
  • Puede ejecutar diferentes funciones dependiendo de la dirección del cliente.
  • Limita el número de conexiones simultáneas provenientes de una dirección.
  • Acceso a los formatos de registro, escritura de registro almacenado, rotación rápida de registros y registro de Syslog.
  • Geolocalización basada en IP.

INSTALACIÓN DEL SERVIDOR

  Dado que se va a instalar en un sistema operativo Linux, y que Nginx se encuentra en sus repositorios oficiales, lo único que hay que hacer para instalarlo es emplear el comando apt install nginx-full (anteponiendo sudo si no se ha entrado en el sistema como administrador), o el que sea adecuado según la distribución de Linux que se tenga instalada. Esta instalación, como la de cualquier otro paquete de Linux, es bastante sencilla y sólo hay que pulsar la letra "S" cuando se pida, y aguardar a que el programa termine de hacerlo, aunque, como siempre, es adecuado realizar una actualización de lista de paquetes [comando apt update (anteponiendo sudo si no se ha entrado en el sistema como administrador)] y de paquetes [comando apt upgrade (anteponiendo sudo si no se ha entrado en el sistema como administrador)].
  Una vez instalado, al ser un demonio, el programa arrancará al instante, pero conviene realizar ciertas configuraciones antes de verlo funcionar (es conveniente detenerlo mientras se realizan las configuraciones, pero no es imprescindible). Lo que puede comprobarse mediante el comando ps aux | grep nginx.

CONFIGURACIÓN DE NGINX

  Una vez instalado el servidor, se deben tener en cuenta las siguientes rutas predeterminadas de archivos importantes de configuración:
  •   Archivo de configuración del servidor: /etc/nginx/nginx.conf.
  •  Carpeta de configuraciones de servidor de los dominios y sitios web: /etc/nginx/conf.d.
  •   Carpeta para la configuración de dominios y sitios web: /etc/nginx/sites-available.
  •   Carpeta de enlaces de activación de los sitios web: /etc/nginx/sites-enabled.
  •   Carpeta para el alojamiento de los sitios web: /var/www.
  •   Archivo de inicio predeterminado: /var/www/html/index.nginx-debian.html.
  •   Carpeta de archivos de registro ("access.log" y "error.log"): /var/log/nginx (esta no configura nada, pero es importante para comprobar las causas de posibles fallos del servidor).
  Antes de editar los archivos de configuración de Nginx, conviene crear un directorio específico para el sitio web que se desea crear en el servidor, para lo que se utilizará el comando mkdir -p <nombre del directorio (mejor si es representativo del sitio web o del dominio)>. Dentro de tal directorio, se debe crear, con el mismo comando (excepto la parte del nombre, por supuesto), un directorio para registros (mejor si se llama "logs"), donde se deben alojar los archivos de registro específicos ("<nombre representativo del dominio o del sitio web>.access.log" y "<nombre representativo del dominio o del sitio web>.error.log"); también se puede crear un directorio para alojar el sitio web o el dominio si es necesario (mismo comando con el nombre "html").
  Para que todos los directorios funcionen correctamente, se les debe cambiar de propietario [comando chown -R <nombre de nuevo propietario>:<nombre del grupo del nuevo propietario> <nombre de directorio a cambiar> (anteponiendo sudo si no se ha entrado en el sistema como administrador)]; además, es mejor que tengan permisos de lectura y ejecución [comando chmod -R 755 <nombre de directorio a cambiar> (anteponiendo sudo si no se ha entrado en el sistema como administrador)].
  Creado todo lo necesario en el directorio "www", se editará el archivo "default" alojado en "sites-available" mediante el comando <editor de texto> <nombre (o ruta) de archivo a editar> (anteponiendo sudo si no se ha entrado en el sistema como administrador).
 Si, por ejemplo, se crea un dominio llamado "svelb1.net", se debería dejar el archivo como muestra la siguiente imagen, y guardarlo, por ejemplo, con el nombre de dicho dominio.
  Como puede verse, en este archivo de configuración se pueden configurar las siguientes funciones:

  • Los puertos de escucha (por defecto, el 80).
  • El directorio donde se almacena la web.
  • El fichero por defecto al acceder a la web, por defecto, “index.html”.
  • Comportamiento en caso de error 404.
  • Configuración de un servidor “virtual” basado en él.
  • Configuración del HTTPS.
  Una vez creado el archivo de configuración específico del dominio a elaborar, se debe hacer un enlace simbólico de este al directorio "sites-enabled", para lo que se empleará el comando ln -s <ruta al archivo de configuración original>  <ruta de "sites-enabled">. Opcionalmente, puede eliminarse el enlace simbólico de "default" como si se tratase de un archivo cualquiera.
  Puede comprobarse si el archivo ha sido configurado correctamente mediante el comando nginx -t
 Finalmente, se reinicia el servidor Nginx [comando systemctl restart nginx (anteponiendo sudo si no se ha entrado en el sistema como administrador)].
  Puede comprobarse el resultado de todas estas gestiones escribiendo la IP y el puerto  (si es distinto de "80", que es el puerto predeterminado para las conexiones de Internet) donde se aloja el Nginx en la barra de direcciones del navegador de red del siguiente modo: IP:puerto.
  Si se quiere asegurar que el navegador de red acceda por el nombre del dominio, lo más sencillo es editar el archivo "hosts" (alojado en el directorio "etc") y añadir una línea con la dirección IP y el nombre del dominio (o el nombre del dominio solamente si ya hay otro nombre de host asociado a una misma dirección IP) (en este ejemplo, la dirección IP es "192.168.0.11", que ya se corresponde con la IP pública del equipo, y se ha añadido el nombre del dominio "svelb1.net").
  Si se trata de una red cerrada, la edición debe hacerse tanto en el archivo "hosts" del equipo servidor, como en el mismo archivo (o su equivalente en otros sistemas operativos) del equipo cliente.  
  Tras editar dicho archivo, se debe reiniciar la red mediante el comando systemctl restart networking (anteponiendo sudo si no se ha entrado en el sistema como administrador).
  Nuevamente puede comprobarse el resultado escribiendo el nombre del dominio en la barra de direcciones del navegador (en el ejemplo, "svelb1.net").

  Finalmente, algunos de los aspectos que se deben recordar a la hora de configurar un servidor Nginx son:

  •   Separar lo máximo posible las configuraciones.
  •   Es recomendable hacer una configuración por separado para cada servidor, aunque estas sean iguales.
  •   Utilizar “include” para importar cada configuración al servidor Nginx.
  •  Los nombres de cada servidor deben utilizar un patrón claro y ser nombres fáciles de identificar.
  Espero que la presente entrada haya sido del gusto del lector. En caso afirmativo, aguardo que la comente y/o la comparta, por favor.

No hay comentarios:

Publicar un comentario

Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.