Ir al contenido
Типы прокси 8 min de lectura 220 vistas

Nginx como Servidor Proxy

Explora una guía completa para configurar Nginx como un servidor proxy. Comprende la configuración, los beneficios y el uso práctico para un rendimiento web mejorado.

Nginx como Servidor Proxy

Nginx funciona como un servidor proxy de alto rendimiento al reenviar eficientemente las solicitudes del cliente a los servidores backend y devolver sus respuestas, lo que permite características como el equilibrio de carga, la terminación SSL y el almacenamiento en caché de contenido.

Introducción

Nginx (Engine-X) es un servidor web de código abierto que también puede operar como un proxy inverso, caché HTTP y equilibrador de carga. Su arquitectura basada en eventos le permite manejar un gran número de conexiones concurrentes de manera eficiente, lo que lo hace adecuado para entornos de alto tráfico. Como proxy, Nginx se sitúa entre los clientes y los servidores backend, mediando el tráfico y añadiendo capas de funcionalidad.

¿Por qué usar Nginx como proxy?

Desplegar Nginx como servidor proxy ofrece varias ventajas operativas:

  • Equilibrio de carga (Load Balancing): Distribuye el tráfico de red entrante entre múltiples servidores backend para mejorar la capacidad de respuesta y la fiabilidad de la aplicación.
  • Terminación SSL/TLS: Maneja las conexiones cifradas de los clientes, descifrando el tráfico antes de reenviarlo a los servidores backend, que luego pueden operar con HTTP sin cifrar. Esto descarga el procesamiento criptográfico de los servidores de aplicaciones.
  • Almacenamiento en caché (Caching): Almacena contenido de acceso frecuente, reduciendo la carga en los servidores backend y disminuyendo los tiempos de respuesta para los clientes.
  • Seguridad: Actúa como un búfer, protegiendo los servidores backend del acceso directo del cliente y de posibles ataques. Puede filtrar solicitudes y aplicar políticas de acceso.
  • Alta disponibilidad: Junto con el equilibrio de carga, Nginx puede desviar el tráfico de los servidores backend no saludables, asegurando un servicio continuo.
  • Gestión de tráfico: Permite la reescritura de URL, el filtrado de solicitudes y la manipulación de contenido.

Tipos de Proxy Nginx

Nginx opera principalmente en dos modos de proxy: proxy inverso y proxy de avance.

Proxy Inverso

Un proxy inverso recupera recursos en nombre de un cliente de uno o más servidores. Estos recursos se devuelven luego al cliente, apareciendo como si se hubieran originado en el propio servidor proxy. Los clientes no son conscientes de la arquitectura backend.

Proxy de Avance

Un proxy de avance recupera recursos de una amplia gama de servidores en nombre de un cliente. Actúa como intermediario para los clientes que solicitan recursos de servidores externos. Los clientes están configurados explícitamente para usar el proxy de avance.

Característica Proxy Inverso Proxy de Avance
Conciencia del Cliente El cliente no es consciente del proxy; las solicitudes apuntan al proxy. El cliente es consciente y está configurado para usar el proxy.
Propósito Protege y optimiza los servidores backend; equilibrio de carga. Permite a los clientes acceder a recursos externos; seguridad/filtrado.
Ubicación Típicamente desplegado delante de los servidores web. Típicamente desplegado en el borde de la red del cliente.
Transparencia Aparece como el servidor de origen para el cliente. Aparece como un intermediario para el cliente.

Configuración Básica de Proxy Inverso

Configurar Nginx como un proxy inverso implica definir un bloque server que escucha las solicitudes entrantes y luego usa la directiva proxy_pass para reenviarlas a un servidor upstream.

Prerrequisitos

  • Una instancia de Nginx instalada.
  • Acceso a los archivos de configuración de Nginx (típicamente /etc/nginx/nginx.conf o archivos dentro de /etc/nginx/sites-available/).
  • Un servidor backend (por ejemplo, un servidor de aplicaciones, otro servidor web) en ejecución y accesible desde el servidor Nginx.

Directivas de Configuración Principales

  • proxy_pass: La directiva fundamental para reenviar solicitudes. Especifica el protocolo, la dirección y el puerto opcional del servidor proxy.
  • proxy_set_header: Modifica los encabezados de solicitud que Nginx envía al servidor proxy. Es esencial para pasar la IP del cliente, el host y la información del protocolo.
  • proxy_buffering: Controla si Nginx almacena en búfer las respuestas del servidor proxy. El almacenamiento en búfer puede mejorar el rendimiento al permitir que Nginx reciba la respuesta completa antes de enviarla al cliente.
  • proxy_cache: Habilita el almacenamiento en caché de las respuestas de los servidores proxy.
# /etc/nginx/sites-available/my_reverse_proxy.conf

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

    location / {
        # El servidor backend de destino
        proxy_pass http://backend_app_server:8080;

        # Pasar el host y la IP originales al backend
        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;

        # Deshabilitar el almacenamiento en búfer del proxy para streaming, habilitar para web tradicional
        # proxy_buffering on; 
    }

    # Opcional: Servir archivos estáticos directamente desde Nginx
    location /static/ {
        root /var/www/my_app;
        expires 30d;
    }
}

Después de crear este archivo, habilítelo creando un enlace simbólico a sites-enabled:
sudo ln -s /etc/nginx/sites-available/my_reverse_proxy.conf /etc/nginx/sites-enabled/
Luego, pruebe la configuración de Nginx y recargue:
sudo nginx -t
sudo systemctl reload nginx

Configuración Avanzada de Proxy Inverso

Equilibrio de Carga

Nginx puede distribuir solicitudes entre múltiples servidores backend utilizando varios algoritmos de equilibrio de carga. El bloque upstream define un grupo de servidores.

# En nginx.conf o un archivo separado incluido por el bloque http

upstream backend_servers {
    # Round-robin (predeterminado)
    server backend_server1.example.com:8080;
    server backend_server2.example.com:8080;
    server 192.168.1.100:8080; # Puede usar direcciones IP

    # Round-robin ponderado
    # server backend_server1.example.com:8080 weight=3;
    # server backend_server2.example.com:8080 weight=1;

    # Menos conexiones
    # least_conn;

    # IP Hash (sesiones pegajosas basadas en la IP del cliente)
    # ip_hash;

    # Comprobaciones de salud (requiere Nginx Plus o módulos específicos)
    # server backend_server1.example.com:8080 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    server_name myapp.example.com;

    location / {
        proxy_pass http://backend_servers; # Referencia al bloque upstream
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Terminación SSL/TLS

Nginx puede terminar conexiones SSL/TLS, descargando el proceso de cifrado/descifrado de los servidores backend. Esto requiere certificados y claves SSL.

server {
    listen 443 ssl;
    server_name secure.example.com;

    ssl_certificate /etc/nginx/ssl/secure.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/secure.example.com.key;

    # Configuraciones SSL recomendadas para seguridad y rendimiento
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    location / {
        proxy_pass http://backend_app_server:8080; # El backend puede ser HTTP
        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 https; # Informar al backend sobre el protocolo original
    }
}

# Opcional: Redirigir HTTP a HTTPS
server {
    listen 80;
    server_name secure.example.com;
    return 301 https://$host$request_uri;
}

Almacenamiento en Caché

Nginx puede almacenar en caché las respuestas de los servidores proxy, reduciendo significativamente la latencia y la carga del backend para contenido estático o que cambia con poca frecuencia.

# En el bloque http (fuera de cualquier bloque server)
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
proxy_cache_key "$scheme$request_method$host$request_uri";

server {
    listen 80;
    server_name cache.example.com;

    location / {
        proxy_pass http://backend_app_server:8080;
        proxy_set_header Host $host;

        proxy_cache my_cache; # Habilitar el almacenamiento en caché para esta ubicación
        proxy_cache_valid 200 302 10m; # Almacenar en caché respuestas 200/302 durante 10 minutos
        proxy_cache_valid 404 1m;    # Almacenar en caché respuestas 404 durante 1 minuto
        proxy_cache_bypass $http_pragma $http_authorization; # No almacenar en caché si estos encabezados están presentes
        proxy_no_cache $http_pragma $http_authorization; # No usar caché si estos encabezados están presentes

        add_header X-Proxy-Cache $upstream_cache_status; # Añadir encabezado para ver el estado de la caché
    }
}

Proxy de WebSockets

El proxy de WebSockets requiere una manipulación específica de los encabezados para manejar los encabezados Upgrade y Connection para el cambio de protocolo.

server {
    listen 80;
    server_name websocket.example.com;

    location /ws/ {
        proxy_pass http://backend_websocket_server:8081;

        # Encabezados específicos de WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400s; # Ajustar según sea necesario para conexiones de larga duración
    }
}

Configuración Básica de Proxy de Avance

Configurar Nginx como un proxy de avance permite a los clientes enrutar sus solicitudes salientes a través de Nginx. Esto se usa típicamente en redes corporativas para control de acceso o registro.

Directivas de Configuración

  • resolver: Especifica los servidores DNS que Nginx debe usar para resolver nombres de host.
  • proxy_pass: Usado dentro de un bloque location, pero con una variable para la URL de destino.
# En el bloque http (fuera de cualquier bloque server)
resolver 8.8.8.8 8.8.4.4 valid=300s; # DNS Público de Google, ajustar según sea necesario

server {
    listen 3128; # Puerto común para servidores proxy
    listen [::]:3128;

    # Restringir el acceso a clientes autorizados (por ejemplo, red interna)
    allow 192.168.1.0/24;
    deny all;

    location / {
        proxy_pass $scheme://$host$request_uri;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # Deshabilitar el almacenamiento en caché para un proxy de avance de propósito general
        proxy_no_cache 1;
        proxy_cache_bypass 1;
    }
}

Los clientes configurarían entonces sus navegadores o aplicaciones para usar nginx_ip_address:3128 como proxy.

Monitoreo y Resolución de Problemas

La operación efectiva de Nginx como proxy requiere capacidades de monitoreo y resolución de problemas.

  • Prueba de Configuración: Siempre valide los archivos de configuración antes de recargar Nginx.
    sudo nginx -t
  • Estado del Servicio: Verifique el estado del servicio Nginx.
    sudo systemctl status nginx
  • Registros de Acceso: Nginx registra cada solicitud que procesa en el registro de acceso, típicamente ubicado en /var/log/nginx/access.log. Estos registros proporcionan detalles como la IP del cliente, el método de solicitud, la URL, el código de estado y el tamaño de la respuesta.
  • Registros de Errores: Los errores críticos, advertencias e información de depuración se escriben en el registro de errores, generalmente en /var/log/nginx/error.log. Monitoree este archivo en busca de problemas con la configuración, la conectividad del backend o las limitaciones de recursos.
  • Salud del Backend: Asegúrese de que los servidores backend estén operativos y accesibles desde el servidor Nginx. Use herramientas como curl o ping desde la máquina Nginx para probar la conectividad.
  • Conectividad de Red: Verifique las rutas de red entre clientes, Nginx y servidores backend.
  • Utilización de Recursos: Monitoree la CPU, la memoria y la E/S del disco en el servidor Nginx para identificar cuellos de botella.
Actualizado: 03.03.2026
Volver a la categoría

Pruebe nuestros proxies

20,000+ proxies en 100+ países del mundo

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.