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.                                                                                  


16 de febrero de 2016

Comandos Basicos de GNU/Linux - Comandos para Visualizacion de Archivos de Texto

Mediante el shell de GNU/Linux es posible visualizar documentos de texto plano de varias maneras. En esta entrada solo se verán algunas de ellas junto con sus principales opciones.

La visualización básica de archivos de texto se realiza mediante el comando cat, que muestra en el shell el contenido completo del archivo de texto que se le pasa como argumento. Si se le pasan varios argumentos, mostrara los archivos de texto en el orden en que se le haya indicado, como si fuesen uno solo, sin distinguir que linea corresponde a que archivo, Sus principales opciones son las siguientes:
  • cat -n, numera todas las lineas de texto, incluyendo las vaciás. En concreto, pone un numero delante de cada linea al mostrarlas en pantalla.
  • cat -b, numera todas las lineas del texto que no estén vaciás. Las lineas vaciás las muestra pero no les pone ningún numero delante.
Como se podrá observar, el comando cat no dispone de demasiadas opciones en cuanto a la visualización de textos, por lo que es la manera mas rudimentaria de mostrarlos en el shell.

Otra forma de visualizar los archivos de texto es con el comando more, que nos da algunas utilidades mas a la hora de ver el texto. Concretamente, dicho comando nos permite avanzar por el documento, linea por linea, pulsando la tecla Enter o pagina por pagina mediante la barra espaciadora. Si le pasamos varios nombres de archivo como argumentos, el comando more nos mostrara uno detrás de otro en el orden indicado, pero siguiendo cada archivo de manera separada. Sus opciones mas útiles son:
  • more -X, donde X es el numero de lineas que se requiere que muestren, por cada pagina. Por ejemplo, si se requiere visualizar 6 lineas por pagina se ejecuta: more -6
  • more +X, donde X es el numero de linea en donde comienza la visualización del archivo. Por ejemplo si, se requiere visualizar un archivo a partir de su linea 12, se ejecuta de la siguiente manera: more +13
Mientras se visualiza un documento con el comando more y se pulsa la letra h, se mostraran las opciones que ofrece durante la visualización.

Un comando similar a more pero mas completo es less, que permite avanzar y retroceder linea a linea con las teclas de flecha de dirección o avanzar pagina a pagina mediante la barra espaciadora y retroceder una pagina mediante la tecla w. Al igual que more, se presiona la tecla h, aparecerán las opciones que permitirán el desplazamiento por el archivo. Si se pasan varios archivos de texto como argumentos, se puede mover entre ellos pulsando :n para ir al siguiente archivo o :p para ir al archivo anterior. Una vez que se esta visualizando un archivo con less y se desea terminal la visualización, se presiona la tecla q.

Las principales opciones de less son las siguientes:
  • less -e, hace que se salga automáticamente de la visualización cuando se llega por segunda vez al final del archivo. La primera vez que se llega al final del archivo permanece en la visualización. Es muy útil para no tener que acordarse de salir con la tecla q.
  • less -E, es muy similar a la anterior opción, pero hace que salga de la visualización cuando llega al final del archivo por primera vez.
  • less -F, sale de la visualización automáticamente si el archivo puede ser mostrado en una sola pagina.
  • less -N, muestra un numero de linea delante de cada linea de texto que  contiene el archivo.
  • less -w, al avanzar una pagina señala cual es la primera linea que no estaba en la pagina anterior. Sirve para saber por donde se estaba leyendo cuando se hizo el cambio de pagina.
Una curiosidad es que less, es el método usado por defecto para mostrar las paginas de manual con el comando man. Es por eso que, cuando se ejecuta man, se puede mover por el manual libremente.

En ocasiones no se requiere visualizar un archivo completo, si no solo el principio o el final. Para ello, el shell de GNU/Linux dispone de dos comandos, head y tail, que muestran respectivamente las primeras o las ultimas 10 lineas del archivo que se pase como argumento. Si en lugar de mostrar 10 lineas, prefiere mostrar mas o menos, ambos comandos comparten las siguientes opciones:
  •  head -n X o tail -n X, donde X es el numero de lineas y que respectivamente muestra las primeras o ultimas lineas del archivo. Por ejemplo, para visualizar las primeras 7 lineas de un archivo se ejecuta: tail -n 7
  • head -c X o tail -c X, donde X es el numero de bytes y que respectivamente muestra los primeros o los últimos bytes (normalmente un carácter equivale a un byte). Por ejemplo para ver los últimos 20 bytes de un archivo se ejecuta: tail -c 20
Para imprimir un archivo de texto mediante una impresora se dispone del comando lpr. La forma de configurar la impresión es mediante las opciones siguientes:
  • lpr -P <nombre de la impresora>, especifica el nombre de la impresora con la que se va a imprimir. En caso de no especificarse se imprimirá en la impresora por defecto. Por ejemplo si la impresora se llama EpsonS22, se ejecuta lo siguiente: lpr -P EpsonS22.
  • lpr -# X, donde X es el numero de copias que se requieren del documento, entre 1 y 100, por defecto 1. Por ejemplo, para 3 copias, se ejecuta lpr -# 3.
Normalmente se especificaran ambas opciones, por lo que se ejecuta: lpr -P EpsonS22 -# 3.

Sea el caso de que se desee ver las paginas que va a ocupar el documento antes de imprimirlo, se dispone del comando pr, que muestra el documento separado en paginas de la misma forma que se haría al enviarlo a la impresora.

Algunas de sus opciones son las siguientes:
  • pr -d, pone el documento a doble espacio.
  • pr -l X, donde X es el numero de lineas que tendrá la pagina. Ejemplo, paginas de 30 lineas: pr -l 30
  • pr -h "texto", permite poner en la cabecera de cada pagina el texto que se encuentre entre comillas.
  • pr -n imprime también el numero de linea asignado a cada linea del texto.

21 de octubre de 2015

Comandos Basicos de GNU/Linux - Comandos de Copiado

Para la gestión de archivos y directorios, se encuentran las opciones de copiar y pegar.

cp : Este comando se utiliza para copiar archivos y copia el archivo que se le pasa como parámetro (origen) en otro cuyo nombre se le pasa como segundo parámetro (destino).

Por ejemplo, se ejecuta el siguiente comando:

$ cp archivo1.txt copiaarchivo.txt

Se copiara el contenido el contenido del archivo archivo1.txt en copiaarchivo.txt, encontrándose ambos en el mismo directorio.

Por otro lado, si en lugar de un archivo, se indica como destino un directorio, lo que sucederá es que creara una copia del archivo origen en el destino especificado.

Por ejemplo

$ cp archivo2.txt /home/usuario/ 

Creara un archivo con el mismo nombre que el original en el directorio /home/usuario/.

El comando cp al igual que el comando rm, dispone de la opción -R, que sirve para copiar directorios enteros con todo su contenido.

Por ejemplo, se ejecuta el siguiente comando:

$ cp -R /home/usuario/directorio1/ /tmp

Copiara todo el contenido del directorio directorio1 en el destino indicado, que en este caso es /tmp

mv : Este comando se utiliza para mover archivos de un directorio a otro, según se indique.

Si por ejemplo, se requiere mover el archivo mueveme.txt que se encuentra en el directorio actual, al directorio /home, se ejecuta el siguiente comando.

$ mv mueveme.txt /home

El comando mv tiene otra utilidad, que es la de cambiar de nombre a un archivo. Para ello, solo habrá que pasarle como parámetros el nombre del archivo que se requiere renombrar y el nombre nuevo. Por ejemplo:

$ mv antiguonombre.txt nuevonombre.txt




7 de octubre de 2015

Comandos Basicos de GNU/Linux – Comandos de Borrado

Tras ver como crear directorios y archivos, ahora se vera como borrarlos.
rmdir: El comando rmdir sirve para eliminar un directorio cuyo nombre sera el que se le pase como argumento. Su nombre proviene de “remove directory”. Como condición para el borrado, el directorio deberá estar vacío. Si no, mostrara un mensaje diciendo que tiene contenido.
Así, para  borrar el directorio Documentos que esta en el directorio de trabajo actual y no contiene nada, se ejecuta:
$ rmdir Documentos
rm: Este comando es similar al anterior y sirve para eliminar un archivo, cuyo nombre sera el que se le pase como argumento.
Por ejemplo, para borrar el archivo miarchivo.txt, se ejecuta el comando:
$ rm miarchivo.txt
Si el archivo no existe, mostrara un error. Al igual que otros comandos, se pueden borrar varios archivos o directorios (según el comando) en una sola linea si se le pasa como argumento.
Por ejemplo:
$ rmdir Documentos Imagenes Musica
Borrara esos tres directorios. El comando rm también sirve para eliminar directorios completos. Para borrar un directorio y todo su contenido, habrá que utilizar el comando rm con la opción -R. Mucho cuidado al utilizar esta opción ya que pudiera borrarse información importante.
unlink: Para borrar un enlace, también se puede utilizar el comando rm, pero lo mas indicado es utilizar unlink. La finalidad de este comando, es borrar un enlace existente.
En el caso en que dicho enlace sea el ultimo que hace referencia al inódo, el archivo se borrara dejando el espacio disponible. En caso contrario de que exista algún otro, solo se borrara el enlace.
Por ejemplo, para borrar el enlace duro enlaceduro, se ejecuta:
$ unlink enlaceduro

Comandos Básicos de GNU/Linux – Comandos de Creación

Una vez visto como cambiar de directorio (cd) y como listar el contenido de un directorio en concreto (ls), así como las posibles opciones que nos ofrece este comando, veamos comandos que nos permitirán crear directorios y archivos:
mkdir Este comando sirve para crear un directorio, cuyo nombre sera el que le pasemos como argumento dicho comando.
Por ejemplo si ejecutamos:
$ mkdir nuevodirectorio
Se creara el directorio nuevodirectorio en el directorio actual de trabajo.
También se puede crear directorios en lugares distintos al que se encuentra posicionado, mediante el uso de rutas absolutas o relativas. Así, si se desea crear el directorio Musica en /etc y se encuentra en /home/usuario, se tienen dos opciones:
$ mkdir /etc/Musica
O bien
$ mkdir ../../etc/Musica
Con el comando mkdir también se pueden crear varios directorios en un mismo comando. Para ello, solo se introducen tantos argumentos como carpetas se quieran crear. Así  el comando
$ mkdir Documentos Imagenes Musica Descargas
Creara esos cuatro directorios en el directorio actual de trabajo.
touch Sirve para cambiar la fecha de acceso y modificación de un archivo que se le pase como argumento. Si el archivo no existe, lo creara vacío con el nombre que se le haya pasado como argumento. Por ejemplo, si se ejecuta el comando:
$ touch ejemplo.txt
Creara un archivo vacío con el nombre ejemplo.txt sino existía anteriormente o simplemente modificara su fecha de acceso y modificación con la fecha actual del sistema si existía con anterioridad. Al igual con el comando mkdir, con el comando touch podemos crear varios archivos con un solo comando.
$ touch archivo1 archivo2 archivo3 archivo4
ln Este comando se utiliza para crear un enlace duro al archivo que se le pasa como argumento. Así, si se ejecuta:
$ ln miarchivo miarchivo1
Se creara un enlace duro al archivo miarchivo, que tendrá como nombre miarchivo1.
Para crear un enlace simbólico disponemos de la opción -s de este comando, que se ejecuta de la misma manera que la anterior.
$ ln -s miarchivo miarchivo2

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...