NGINX con proxy inverso
Introducción a NGINX y al proxy inverso
NGINX es un servidor HTTP de alto rendimiento, un servidor proxy inverso y un software de código abierto utilizado por muchos sitios web de todo el mundo. Su versatilidad y velocidad lo han convertido en una opción popular para el alojamiento web, el equilibrio de carga, el almacenamiento en caché y el proxy inverso. Un proxy inverso, en particular, es una poderosa herramienta que se sitúa delante de un servidor web y reenvía las peticiones de los clientes a los servidores backend apropiados. Este artículo cubrirá los fundamentos de NGINX con proxy inverso y cómo configurarlo eficazmente.
¿Qué es un proxy inverso?
Un proxy inverso actúa como intermediario entre los clientes y los servidores backend. A diferencia de un proxy normal, que es utilizado por los clientes para acceder a los recursos de forma anónima, un proxy inverso se sitúa en el lado del servidor, gestionando las peticiones de los clientes y distribuyéndolas a los servidores backend apropiados. Las principales ventajas de utilizar un proxy inverso son:
- Equilibrio de la carga: Distribución de las peticiones de los clientes entre varios servidores, lo que evita la sobrecarga de un único servidor y mejora el rendimiento general.
- Seguridad y anonimato: oculta las direcciones IP de los servidores backend, protegiéndolos de la exposición directa a Internet.
- Almacenamiento en caché: Almacenamiento en caché de contenido estático para acelerar la entrega de recursos solicitados con frecuencia.
- Terminación SSL: Descarga del cifrado y descifrado SSL/TLS al proxy inverso, reduciendo la carga de procesamiento de los servidores backend.
¿Por qué utilizar NGINX como proxy inverso?
El diseño ligero de NGINX y su arquitectura no bloqueante lo convierten en una excelente elección como proxy inverso. Puede manejar un gran número de conexiones concurrentes con un bajo consumo de recursos, lo que lo hace ideal para sitios web que experimentan un alto tráfico o que necesitan mantener una alta disponibilidad. Algunas de las ventajas de utilizar NGINX como proxy inverso son:
- Alto rendimiento: NGINX está diseñado para manejar eficientemente un gran número de conexiones, por lo que es perfecto para entornos que requieren tiempos rápidos de solicitud-respuesta.
- Flexibilidad: NGINX permite una fácil configuración de múltiples servidores backend, permitiendo complejas configuraciones de balanceo de carga y conmutación por error.
- Escalabilidad: A medida que crece el tráfico, puede añadir más servidores backend y equilibrar la carga sin interrupciones.
- Funciones de seguridad: NGINX puede imponer conexiones HTTPS, bloquear direcciones IP específicas y gestionar la autenticación.
Cómo configurar NGINX como proxy inverso
Configurar NGINX como proxy inverso implica configurar NGINX para que escuche las peticiones HTTP o HTTPS entrantes y las reenvíe a uno o más servidores backend. Aquí tienes una guía paso a paso para empezar:
Paso 1: Instalar NGINX
Si no has instalado NGINX en tu servidor, empieza por instalarlo. Para la mayoría de las distribuciones de Linux, puede utilizar el siguiente comando:
# Para Debian/Ubuntu
sudo apt update
sudo apt install nginx
# Para CentOS/RHEL
sudo yum install epel-release
sudo yum install nginx
Una vez instalado, inicie el servicio NGINX:
sudo systemctl start nginx
Paso 2: Configuración básica del proxy inverso NGINX
Para configurar un proxy inverso básico, debe editar el archivo de configuración de NGINX, normalmente ubicado en /etc/nginx/nginx.conf o crear un nuevo archivo de configuración dentro de /etc/nginx/conf.d/. A continuación se muestra una configuración sencilla para el proxy inverso de solicitudes a un servidor backend:
servidor {
listen 80;
nombre_servidor ejemplo.com;
ubicación / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $dirección_remota;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- listen 80;: Indica a NGINX que escuche las peticiones HTTP en el puerto 80.
- nombre_servidor: Sustituya ejemplo.com por su dominio o dirección IP.
- proxy_pass: Especifica la dirección del servidor backend al que deben reenviarse las peticiones.
- proxy_set_header: Establece cabeceras adicionales para pasar al backend, que pueden ser útiles para el registro y la seguridad.
Paso 3: Proxy inverso para múltiples servidores backend
Para configurar el equilibrio de carga entre varios servidores backend, puede definir un bloque ascendente:
backend upstream {
servidor backend1.ejemplo.com;
servidor backend2.ejemplo.com;
servidor backend3.ejemplo.com;
}
servidor {
listen 80;
nombre_servidor ejemplo.com;
ubicación / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $dirección_remota;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Esta configuración distribuye las peticiones entre backend1.ejemplo.com, backend2.ejemplo.com y backend3.ejemplo.com de forma round-robin.
Paso 4: Habilitar SSL para conexiones seguras
Para proteger la comunicación entre los clientes y el proxy inverso NGINX, puede habilitar SSL/TLS. Necesitará un certificado SSL, que puede obtener de proveedores como Let’s Encrypt:
servidor {
listen 443 ssl;
nombre_servidor ejemplo.com;
ssl_certificate /ruta/para/ssl_certificate.crt;
ssl_certificate_key /ruta/para/ssl_certificate_key.key;
ubicación / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $dirección_remota;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Asegúrese de reemplazar las rutas a su certificado y clave SSL. Con esta configuración, NGINX terminará la conexión SSL y reenviará el tráfico al servidor backend a través de HTTP.
Paso 5: Probar y reiniciar NGINX
Después de realizar cambios en la configuración de NGINX, es importante probar la configuración para detectar cualquier error de sintaxis:
sudo nginx -t
Si no hay errores, reinicia NGINX para aplicar los cambios:
sudo systemctl restart nginx
Configuración avanzada del proxy inverso NGINX
Para configuraciones más avanzadas, puede configurar el almacenamiento en caché, la reescritura de URL y algoritmos personalizados de equilibrio de carga. Aquí tiene algunas opciones adicionales:
- Almacenamiento en cach é: Para habilitar el almacenamiento en caché, añada directivas proxy_cache en su bloque de ubicación.
- Equilibrio de carga personalizado: Utilice diferentes estrategias de equilibrio de carga como least_conn para distribuir el tráfico al servidor backend con menos conexiones activas.
- Comprobaciones de estado: Configure comprobaciones de salud para garantizar que NGINX reenvía el tráfico sólo a servidores backend en buen estado utilizando proxy_next_upstream.
Conclusión
El uso de NGINX como proxy inverso es una potente forma de gestionar el tráfico y mejorar la escalabilidad, el rendimiento y la seguridad de sus aplicaciones web. Configurando NGINX para gestionar peticiones y distribuirlas entre servidores backend, puede conseguir una infraestructura altamente disponible y eficiente. Tanto si aloja un sitio web pequeño como una aplicación a gran escala, NGINX con funciones de proxy inverso puede ser un componente fundamental de su arquitectura.
Con esta guía, debería estar bien equipado para configurar y optimizar NGINX como proxy inverso para sus necesidades.