Cómo configurar Nginx como proxy inverso

Una guía para configurar Nginx como proxy inverso, en la que se explica la instalación, la configuración de los bloques de servidor, el reenvío de solicitudes a los servidores de fondo, la gestión de encabezados y la configuración opcional de SSL/TLS para mejorar la seguridad y el rendimiento.

Intermediate

Nginx es un potente servidor web que también puede funcionar eficazmente como proxy inverso. Al configurarlo como proxy inverso, se sitúa delante de los servidores de aplicaciones, gestionando las solicitudes entrantes de los clientes y reenviándolas a los servidores de backend correspondientes. Esta configuración puede mejorar el rendimiento, la seguridad y la escalabilidad.

Ventajas de utilizar Nginx como proxy inverso

  • Equilibrio de carga: distribuye el tráfico entrante entre varios servidores backend.
  • Mayor seguridad: oculta la estructura de la red interna y los servidores backend del acceso directo de los clientes.
  • Terminación SSL/TLS: gestiona el cifrado y descifrado HTTPS, liberando a las aplicaciones de backend de esta tarea.
  • Almacenamiento en caché: almacena en caché contenido estático y dinámico para reducir la carga del servidor y mejorar los tiempos de respuesta.
  • Compresión: Comprime las respuestas para acelerar la entrega.
  • Servicio de contenido estático: Sirve archivos estáticos directamente de forma eficiente, sin sobrecargar los servidores de aplicaciones.

1. Instala Nginx

Si Nginx aún no está instalado en su servidor, puede instalarlo utilizando el gestor de paquetes de su distribución.

  • Para Ubuntu/Debian: bash sudo apt update sudo apt install nginx
  • Para CentOS/RHEL/Fedora: bash sudo dnf install nginx # or yum for older versions

Tras la instalación, inicia el servicio Nginx y habilítalo para que se inicie al arrancar el sistema:

sudo systemctl start nginx
sudo systemctl enable nginx

Puedes comprobar que Nginx está en ejecución accediendo a http://localhost en su navegador web.

2. Localice los archivos de configuración de Nginx

Los archivos de configuración de Nginx suelen encontrarse en /etc/nginx/. El archivo de configuración principal suele ser nginx.conf. A menudo encontrarás un sites-available directorio que contiene las configuraciones de cada sitio, las cuales se enlazan simbólicamente a sites-enabled para activarlas.

3. Configurar el bloque de servidor

Tendrás que crear o modificar un bloque de servidor dentro de tu configuración de Nginx. Este bloque define cómo gestiona Nginx las solicitudes para un dominio o una dirección IP específicos.

Un bloque de servidor básico para un proxy inverso tiene este aspecto:

server {
    listen 80; # Nginx listens on port 80 for incoming HTTP requests
    server_name your_domain.com www.your_domain.com; # Replace with your domain name

    location / {
        proxy_pass http://backend_server_ip:port; # Forward requests to your backend server
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Explicación de las directivas:

  • listen 80;: Nginx escuchará las solicitudes HTTP entrantes en el puerto 80.
  • server_name: Especifica los nombres de dominio a los que debe responder este bloque de servidor.
  • location /: Este bloque define cómo se gestionan las solicitudes que coinciden con la ruta raíz (/) deben gestionarse. Puedes crear location para diferentes rutas (p. ej., location /api/).
  • proxy_pass: Esta es la directiva principal para el proxy inverso. Indica a Nginx que reenvíe las solicitudes a la dirección IP y al puerto del servidor backend especificados.
  • proxy_set_header: Estas directivas son cruciales para pasar la información original del cliente (como la dirección IP y el host) al servidor backend, lo que puede resultar útil para el registro y la lógica de la aplicación.

4. Habilitar la configuración

Si has creado un nuevo archivo de configuración en sites-available/, debes habilitarlo creando un enlace simbólico a sites-enabled/:

sudo ln -s /etc/nginx/sites-available/my_reverse_proxy /etc/nginx/sites-enabled/

5. Prueba la configuración de Nginx

Antes de reiniciar Nginx, comprueba siempre que tu configuración no contenga errores de sintaxis:

sudo nginx -t

Si la prueba se supera, verás un mensaje indicando que la sintaxis es correcta y que la prueba ha tenido éxito.

6. Recargar Nginx

Para aplicar la nueva configuración, recargue Nginx:

sudo systemctl reload nginx

7. Prueba tu proxy inverso

Abre un navegador web y ve a http://your_domain.com (o a la dirección IP de tu servidor si no tienes un dominio configurado). Nginx debería estar ahora reenviando tu solicitud al servidor backend, y deberías ver el contenido servido por tu aplicación backend.

Esta configuración básica proporciona una base para utilizar Nginx como proxy inverso. Puedes personalizarla aún más con funciones como terminación SSL/TLS, equilibrio de carga, almacenamiento en caché y reglas de enrutamiento más avanzadas.