6 de diciembre de 2023

Que es NGINX ?

NGINX es un servidor web diseñado para ser rapido, eficiente y compatible con casi cualquier cosa que se pueda imaginar. Es facil de instalar y configurar. Algunas caracteristicas destacadas que tiene NGINX tiene son:

  • Servidor web basico.
  • Proxy inverso para dirigir el trafico a multiples sitios.
  • Balanceo de carga integrado para gestionar el trafico a varios sitios.
  • Almacenamiento en cache de archivos incorporado para mayor velocidad.
  • Websockets.
  • Soporte para FastCGI.

Para iniciar con NGINX, lo primero que se necesita es instalarlo en el sistema operativo y aprender algunas cosas basicas, como: donde se encuentra el archivo principal de configuracion, cuales son los comandos para su instalacion, verificar la instalacion y realizar peticiones al servidor. 


Requisitos previos


Necesitara:
  • Computadora conectada a Internet.
  • Familiaridad basica con la linea de comandos.
  • Poder ejecutar comandos como usuario root o con sudo.
  • Editor de texto basado en linea de comandos.


Instalacion de NGINX en Debian/Ubuntu


Para instalar NGINX en una computadora con Debian o Ubuntu, actualiza los repositorios de software ya configurados e instala algunos paquetes para la configuracion del repositorio de NGINX oficial:

apt-get update
apt install -y curl gnupg2 ca-certificates lsb-release \
    debian-archive-keyring

Descargue y guarde la llave firmada de NGINX:

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ 
     | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Use lsb-release para las variables que definen los nombre del sistema operativo y la version, despues cree un archivo apt:

OS=$(lsb_release -is | tr '[:upper:]' '[:lower:]') 
RELEASE=$(lsb_release -cs) 
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ 
      http://nginx.org/packages/${OS} ${RELEASE} nginx" \
      | tee /etc/apt/sources.list.d/nginx.list


Instalacion de NGINX en RedHat/CentOS/Rocky Linux/AlmaLinux


Para instalar NGINX en una computadora con RedHat o CentOS, crea un archivo con el nombre /etc/yum.repos.d/nginx.repo que contendra lo siguiente:

[nginx] name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/ 
gpgcheck=0
enabled=1

Dentro del archivo, remplazar en la URL, OS con rhel o centos, dependiendo de su distribucion. Reemplazar OSRELEASE con 8 o 9 para la version 8.x o 9.x respectivamente. Despues, ejecute los siguientes comandos:

yum -y install nginx
systemctl enable nginx
systemctl start nginx
firewall-cmd --permanent --zone-public --add-port=80/tcp
firewall-cmd --reload

Verificar la instalacion


Puede verificar que NGINX esta instalado y ver su version, usando el siguiente comando:

$ nginx -v
nginx version: nginx/1.25.3

Tambien puede confirmar que NGINX se esta ejecutando, usando el siguiente comando

$ ps -ef  | grep nginx
root    8129    1  0 00:59 ? 00:00:00 nginx: master process
nginx   8130 8129  0 00:59 ? 00:00:00 nginx: worker process

El comando ps enumera los procesos en ejecucion. Al canalizarlo al comando grep, puede buscar palabras esepcificas en la salida. En este ejemplo, utiliza grep para buscar nginx. El resultado, muestra dos procesos en ejecucion: un master y un worker. Si NGINX se esta ejecutando, siempre vera un proceso master y uno o mas procesos worker. Tenga en cuenta que el proceso master se ejecuta como root, ya que NGINX necesita privilegios elevados para funcionar correctamente. 
Para iniciar NGINX como un daemon, utilice los metodos init.d o systemd.

Para verificar que NGINX esta devolviendo solicitudes correctamente, utilice su navegador y realice una solicitud a la maquina o puede utilizar el comando curl para realizar la solicitud. Cuando realice la solicitud, utilice la direccion IP o el nombre de host. Si lo instala localmente en su computadora, puede usar localhost de la siguiente manera: 

curl localhost

Vera el sitio HTML predeterminado de bienvenida de NGINX.  

Archivos clave, directorios y comandos


Los siguientes archivos, directorios y comandos son importantes para conocer como iniciar con NGINX.

/etc/nginx/
El directorio /etc/nginx/ es donde se localza la configuriacion predeterminada para el servidor NGINX. Dentro de este directorio encontrara archivos de configuracion que instruyen a NGINX como comportarse.

/etc/nginx/nginx.conf
El archivo /etc/nginx/nginx.conf es el punto de entrada en la configuracion predeterminada utilizado por el servicio de NGINX. Este archivo de configuracion establece las configuraciones globales para cosas como procesos de trabajo, ajustes, registros, carga de modulos dinamicos y referencias a otros archivos de configuracion de NGINX.

En la configuracion predeterminada, el archivo /etc/nginx/nginx.conf incluye el bloque http de nivel superior o contexto, que incluye los archivos de configuracion en el directorio que se describe a continuacion.

/etc/nginx/conf.d
El directorio /etc/nginx.conf.d/ contiene el archivo de configuracion del servidor HTTP predeterminado. Los archivos de este directorio que se terminan en .conf se incluyen en el bloque http de nivel superior desde el archivo /etc/nginx/nginx.conf. Es buena practica utilizar declaraciones de inclusion y organizar su configuracion de esta manera para mantener sus archivos de configuracion concisos.

En algunos repositorios, este directorio la denominan sites-enabled y los archivos de configuracion estan vinculados desde un directorio denominado site-available; esta convencion esta en desuso.

/var/log/nginx/
El directorio /var/log/nginx/ es la ubicacion predeterminada para los registros de NGINX. Dentro de este directorio encontrara un access.log y un archivo error.log.

El registro de acceso contiene una entrada para cada solicitud que atiende NGINX. El archivo de registro de errores contiene eventos de error e informacion de depuracion si el modulo de depuracion esta activado.

Comandos de NGINX


nginx -h
    Muestra el menu de ayuda de NGINX.

nginix -v
    Muestra la version de NGINX.

nginx -V
    Muestra la version de NGINX, informacion de compilacion y los argumentos de configuracion, que muestran los modulos integrados en el binario de NGINX.

nginx -t
    Prueba la configuracion de NGINX.

nginx -T
    Prueba la configuracion de NGINX e imprime en la pantalla la configuracion validada. Este comando es util cuando se busca soporte o apoyo.

nginx -s signal
    El indicador -s envia una señal al prceso NGINX master. Puede enviar señales como: stop, quit, reload y reopen. La señal de stop interrumpe el proceso NGINX inmediatamente. La señal quit detiene el proceso NGINX una vez que termina de procesar las solicitudes en curso. La señal de reload recarga la configuracion. La señal de reopen le indica a NGINX que vuelva a abrir los archivos de registro

Una vez comprenda estos archivos, directorios y comandos clave, estara en buena posicion para comenzar a trabajar con NGINX. Con este conocimiento, puede modificar los archivos de configuracion predeterminados y probar sus cambios con el comando nginx -t. Si su prueba es exitosa, tambien sabe como indicarle a NGINX que recargue su configuracion usando el comando nginx -s reload.

Sirviendo Contenido Estatico


Necesita ofrecer contenido estatico con NGINX. Sobreescriba la configuracion predeterminada del servidor HTTP ubicada en /etc/nginx/conf.d/default.conf  con la siguiente configuracion de ejemplo 


server { 
      listen 80 default_server; 
      server_name www.example.com;

      location / {
            root /usr/share/nginx/html; 
            # alias /usr/share/nginx/html; 
            index index.html index.htm;
      }
}


Esta configuración sirve archivos estáticos a través de HTTP en el puerto 80 desde el directorio /usr/share/nginx/html/. La primera línea de esta configuración define un nuevo bloque  server. Esto define un nuevo contexto para indicar a NGINX por donde debe recibir escuchar solicitudes. La línea dos le indica a NGINX que escuche en el puerto 80, y el parámetro default_server le indica a NGINX que use este servidor como contexto predeterminado para el puerto 80. La directiva de escucha también puede tomar una variedad de puertos. La directiva server_name define el nombre de host o los nombres de las solicitudes que deben dirigirse a este servidor. Si la configuración no hubiera definido este contexto como default_server, NGINX dirigiría las solicitudes a este servidor solo si el encabezado del host HTTP coincidiera con el valor proporcionado a la directiva server_name. Con el contexto default_server configurado, puede omitir la directiva server_name si no tiene aun un nombre de dominio para usar.


El bloque location define una configuración basada en la ruta en la URL. La ruta, o parte de la URL después del dominio, se denomina identificador uniforme de recursos (URI). NGINX hará coincidir mejor el URI solicitado con un bloque location. El ejemplo usa / para hacer coincidir todas las solicitudes. La directiva root muestra a NGINX dónde buscar archivos estáticos al entregar contenido para un contexto dado. El URI de la solicitud se agrega al valor de la directiva root cuando se busca el archivo solicitado. Si hubiéramos proporcionado un prefijo URI a la directiva de location, este se incluiría en la ruta adjunta, a menos que usáramos la directiva alias en lugar de root. La directiva location puede coincidir con una amplia gama de expresiones. Por último, la directiva index proporciona a NGINX un archivo predeterminado, o una lista de archivos para verificar, en caso de que no se proporcione más ruta en el URI.


Fuente: NGINX Cookbook, Second Edition, Derek DeJonghe, 2022, O' Reilly Media Inc.                                                                                  


Que es NGINX ?

NGINX es un servidor web diseñado para ser rapido, eficiente y compatible con casi cualquier cosa que se pueda imaginar. Es facil de instala...