NGINX

De La Wiki de KiVi
NGINX
NGINX
DesarrolladorIgor Sysoev
Datos técnicos
Webhttps://nginx.org/
GeneroServidor web, Proxy
LicenciaLicencia BSD simplificada

Introducción

Nginx (pronunciado en inglés «ényin-ex», /ˈɛndʒɪn-ɛks/)​ es 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.

El sistema es usado por una larga lista de sitios web conocidos,​ como: WordPress, Netflix, Hulu, GitHub, Ohloh, SourceForge, TorrentReactor y partes de Facebook (como el servidor de descarga de archivos zip pesados).


Su creador, Igor Sysoev, en su página personal desde 2009 escribe el nombre totalmente en minúsculas,​ mientras que el nombre de la empresa propietaria desde 2011 lo escribe totalmente en mayúsculas,​ lo cual se corresponde con el nombre que devuelve el encabezado HTTP en todas y cada una de las solicitudes de conexión con que inicia la visita de cada página web.

Para complicar más el asunto el logotipo tiene caracteres tanto en mayúsculas y minúsculas del alfabeto cirílico,​ no obstante se ha logrado un consenso en denominar nginx al servidor web,​ NGINX a los productos y servicios derivados que maneja la empresa y Nginx para referirse a ambos en conjunto.

Comparación con Apache

Nginx fue inicialmente desarrollado con el fin explícito de superar el rendimiento ofrecido por el servidor web Apache.​ Sirviendo archivos estáticos, Nginx usa dramáticamente menos memoria que Apache, 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 Nginx 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 aun deben ser compilados al mismo tiempo que Nginx, y no todos los módulos son compatibles con este sistema; algunos requieren el antiguo proceso de enlazado estático.

Instalación

En nuestros servidores Fedora o derivados podemos instalarlo con:

sudo dnf install nginx php-fpm

Añado el paquete "php-fpm" para tener la integración con el lenguaje PHP. Una vez instalado lo iniciamos:

sudo systemctl start nginx php-fpm

Y lo habilitamos para persistir el servicio en el inicio de sistema:

sudo systemctl enable nginx php-fpm

Seguimos añadiendo una regla permanente del cortafuegos:

sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https

Y recargamos el cortafuegos:

sudo firewall-cmd --reload

Ahora basta con abrir el navegador web y escribir la IP del servidor web:, por ejemplo:

http://192.168.1.3

Y ya debería mostrar la página de ejemplo.

Antes que nada, no abrimos https porque el servicio está configurado para tener el SSL comentado.

Estructura de ficheros y directorios

Como todos los servicios instalados, el directorio de configuración se encuentra en:

/etc/nginx

De todos los ficheros nos quedaremos con el fichero de configuración:

nginx.conf

En el que se muestra la configuración general del servidor como el directorio, el puerto de trabajo y que, como es recomendable, las configuraciones adicionales se realizan en la linia:

include /etc/nginx/conf.d/*.conf;

Es decir, aplicará todos los ficheros con extensión "conf" de este directorio. Por defecto, el directorio de publicación es:

/usr/share/nginx/hmtl

Aunque podemos cambiar el directorio, pero recordemos que hay que aplicar las reglas de SELinux para el directorio. Por otro lado, el registro de la navegación se encuentra en los ficheros:

/var/log/nginx/access.log ##para los registros de acceso /var/log/nginx/error.log ##Para los errores de carga de páginas.

NOTA - en la navegación, entre otras cosas, se muestra el navegador utilizado.

Configuraciones

A continuación vamos a explicar las configuraciones más utilizadas por este servicio:

Balanceo de carga

Esta opción nos permite a un equipo nodo poder permitir que una página web se cargue por otros equipos, por ejemplo, tenemos el equipo principal con NGINX y queremos que la página no se cargue de este equipo sino que, cada vez que se haga la petición, se cargue de un equipo o de otro, eso nos permite que, si un equipo está saturado de peticiones, la carga la haga desde otro.

Tenemos el equipo que responde a www.ejemplo.com y dentro de esta red ( o de internet ) tenemos otros equipos con la misma página o contenido, cada vez que se haga una petición a www.ejemplo.com, se cargará la web de uno de los nodos especificados en la configuración del nodo de balanceo, siendo menos costoso para el equipo principal.

Primero nos situaremos en nuestro equipo proxy con NGINX y editamos el fichero de configuración

sudo vi /etc/nginx/nginx.conf

NOTA - se recomienda siempre una copia de seguridad del fichero. Nos situamos dentro de la directiva "http { " y en la siguiente línea especificamos el balanceo añadiendo:

upstream servidores {

server 192.168.1.240;

server 192.168.1.241;

}

NOTA - son las IP o los nombres de los servidores web que se realizaran las peticiones de balanceo.


Ahora vamos a la directiva "server {" donde lo más importante se especifica el puerto de 80 de navegación. En esta directiva iremos a "location / {" y en la siguiente linia agregamos:

proxy_pass http://servidores;

Es decir, aplicamos que las peticiones que entren por la puerta 80 ( o 443 si así lo hemos especificado ), se ejecuta el bloque "servidores" que especificamos. Cerramos, guardando y reiniciamos el servicio:

sudo systemctl restart nginx

Y cada petición de carga de web al proxy será cargado por uno de los servidores.


NOTA - seguramente SELinux bloquee la navegación de proxy y se soluciona aplicando:

sudo setsebool httpd_can_network_connect 1

Con lo que se permite el tráfico en la red por el protocolo http.

¡IMPORTANTE! Hay que tener en cuenta las páginas dinámicas, es decir, cuando se precisa un usuario y contraseña para acceder a una web, obviamente, no va a replicar una validación, por lo que eso ya se vería reflejado en la configuración de la base de datos.

Bloques de servidor

Un caso práctico sería, tener un servidor que publica la web www.empresa.com, pero ha crecido y quiere otro servidor exclusivo para las ventas, bajo el dominio ventas.empresa.com. Esto implicaría la compra de dos equipos, pero eso se puede realizar desde el mismo equipo servidor NGINX.

En Apache sería comparable a los VirtualHost pero más avanzado.