nginx tutorial: comandos y configuraciones básicas
En nuestro artículo “nginx, el servidor web rápido y sostenible” resumíamos el proceso de instalación en el sistema y las características básicas de nginx. En el siguiente tutorial ofrecemos un resumen de los comandos básicos y opciones de configuración de este moderno servidor web.
La unidad central de control: nginx.conf
A diferencia de Apache, nginx no se basa en procesos, sino en eventos. Las solicitudes individuales se clasifican como eventos y no como nuevos procesos de trabajo para los que es necesario cargar todos los módulos. Estos eventos son distribuidos en los procesos existentes, que son mantenidos en funcionamiento por el proceso principal. La cantidad de procesos existentes y la manera en la que se dividen las solicitudes del servidor (es decir, los eventos) se definen en el archivo de configuración nginx.conf. Por defecto, este archivo lo puedes encontrar en los directorios /usr/local/nginx/conf, /etc/nginx o /usr/local/etc/nginx.
Gestionar procesos y adoptar nuevas configuraciones
Una vez finalizada la instalación, nginx se iniciará automáticamente –aunque también se puede iniciar manualmente utilizando el siguiente comando:
sudo service nginx start
Cuando el software se ha puesto en marcha, los procesos (sobre todo el proceso principal) se controlan con el parámetro –s y una señal (signal) específica. La sintaxis del comando correspondiente es tan sencilla como:
sudo nginx -s signal
Como “señal” tienes las siguientes cuatro opciones:
- stop: finaliza nginx inmediatamente.
- quit: nginx se termina después de que todas las solicitudes activas han sido contestadas.
- reload: el archivo de configuración se vuelve a cargar.
- reopen: se reinician los archivos de registro.
La opción reload con la que se vuelve a cargar el archivo de configuración es una manera práctica de aplicar cambios al mismo sin tener que finalizar y reiniciar el servidor. En cualquier caso, y para para que el sistema acepte y guarde los cambios, es necesario decidirse por una variante que reinicie el servidor por completo o por una que realice únicamente el nginx reload. Si quieres elegir la opción más elegante, es decir la segunda, y ejecutar el comando, el proceso principal recibe una indicación para aplicar los cambios en el archivo nginx.conf:
sudo nginx -s reload
Para este propósito el primer paso es verificar la sintaxis. En caso de que esta sea correcta, el proceso principal inicia otros procesos de trabajo con la nueva configuración y, simultáneamente, detiene los procesos antiguos. Si la comprobación de la sintaxis falla, la configuración previa se mantiene. Todos los procesos activos se terminan tan pronto como se han procesado todas las solicitudes activas.
Recuerda que también es posible abordar procesos de nginx directamente utilizando herramientas como kill. Todo lo que necesitas es el ID del proceso que encontrarás en el archivo nginx.pid en el directorio /usr/local/nginx/logs, o alternativamente en /var/run. Así, si el proceso tiene, por ejemplo, el ID 1628, puede ser finalizado en el ciclo suave con la señal quit y con kill:
sudo kill -s quit 1628
El programa de utilidad ps te presenta una lista con todos los procesos nginx que se están ejecutando:
sudo ps -ax | grep nginx
Cómo controlar la entrega de contenido estático
Es muy probable que utilices tu servidor web para suministrar contenido como imágenes, vídeos o contenido HTML estático. Por razones de eficiencia, es recomendable seleccionar varios directorios locales para los diferentes tipos de contenido, tal como ejemplificaremos a continuación.
Comienza creando el directorio /data/html y, en él, el documento HTML index.html y la carpeta /data/fotos, junto con algunas imágenes de muestra.
En el siguiente paso los dos directorios deben ser movidos al archivo de configuración, manteniéndolos en la directiva bloque-servidor, que es a su vez, una subdirectiva de la directiva del bloque-HTTP. Por defecto, allí encontrarás algunas instrucciones que han sido previamente registradas pero que puedes desactivar en cualquier momento (off). A continuación, solo necesitas añadir una instrucción adicional al bloque-Servidor:
http {
server {
}
}
Ahora, ambos directorios (uno con fotos y otro con el documento HTML) deben aparecer en el bloque-Servidor. El resultado correspondiente se verá de la siguiente manera:
server {
location / {
root /data/html;
}
location /bilder/ {
root /data;
}
}
Esta configuración es, por defecto, un ajuste estándar de un servidor que se escucha en el puerto 80 y es accesible a través del host local. Todas las solicitudes cuyas URI (Identificador de recursos uniforme) comienzan con /fotos/ solicitarán datos del directorio /data/fotos. Si el archivo correspondiente no existe, aparecerá el mensaje de error. Todos los eventos nginx cuyas URI no empiezan con /fotos/ se remiten al directorio /data/html.
Recuerda que debes cargar de nuevo o reiniciar nginx para aplicar los cambios.
Configuración de un servidor proxy nginx simple
A menudo, nginx es utilizado para dirigir un servidor proxy que, reemplazando al servidor real, es el encargado de recibir las peticiones entrantes, de filtrarlas bajo determinados criterios y de entregar las respectivas respuestas a los clientes. Los servidores proxy caché son especialmente populares, pues entregan el contenido estático almacenado directamente y solo transmiten peticiones entrantes al servidor. Los cortafuegos proxy que filtran conexiones inseguras o indeseadas también son muy conocidos. A continuación ejemplificamos el anteriormente mencionado proxy caché, quien debe reproducir las imágenes solicitadas desde el directorio local y reenviar todas las solicitudes al servidor web. El primer fragmento define el servidor principal en nginx.conf:
server {
listen 8080;
root /data/up1;
location / {
}
}
A diferencia del ejemplo anterior, utiliza la directiva Listen, pues el puerto que se debe utilizar para las solicitudes entrantes es 8080 y no el puerto predeterminado. Establece /data/up1 como directorio de destino y coloca allí la página index.html.
Posteriormente, utilizando la directiva ProxyPass, define el servidor proxy y su función para entregar contenido de la imagen, incluyendo informaciones sobre el servidor principal (Protocolo (http), Nombre (localhost) y Puerto (8080):
server {
location / {
proxy_pass http://localhost:8080;
}
location ~ \.(gif|jpg|png) $ {
root /data/bilder;
}
}
El segundo bloque Location designa al servidor proxy la tarea de responder por sí mismo a todas las solicitudes cuyas URI tengan terminaciones típicas como .gif, .jpg y .png, mientras que el contenido correspondiente es recuperado desde el directorio /data/fotos. Las demás solicitudes son enviadas al servidor principal. Al igual que con la configuración anterior, guarda las imágenes proxy con la señal reload en el proceso principal o por medio de restart nginx. Si quieres conocer otras directrices para gestionar configuraciones del proxy más complejas, consulta el manual en inglés en la página web oficial de nginx.