Androide

Configurar un proxy inverso nginx

Qué es y para que sirve un proxy inverso con Nginx

Qué es y para que sirve un proxy inverso con Nginx

Tabla de contenido:

Anonim

Un proxy inverso es un servicio que toma una solicitud del cliente, envía la solicitud a uno o más servidores proxy, obtiene la respuesta y entrega la respuesta del servidor al cliente.

Debido a su rendimiento y escalabilidad, NGINX a menudo se usa como proxy inverso para servidores HTTP y no HTTP. Una configuración típica de proxy inverso es colocar Nginx frente a las aplicaciones Node.js, Python o Java.

Usar Nginx como proxy inverso le brinda varios beneficios adicionales:

  • Equilibrio de carga: Nginx puede realizar el equilibrio de carga para distribuir las solicitudes de los clientes en servidores proxy, lo que mejora el rendimiento, la escalabilidad y la confiabilidad. Almacenamiento en caché: con Nginx como proxy inverso, puede almacenar en caché las versiones preprocesadas de las páginas para acelerar los tiempos de carga de la página. Funciona almacenando en caché el contenido recibido de las respuestas de los servidores proxy y usándolo para responder a los clientes sin tener que contactar al servidor proxy para obtener el mismo contenido cada vez. Terminación SSL: Nginx puede actuar como un punto final SSL para las conexiones con los clientes. Manejará y descifrará las conexiones SSL entrantes y cifrará las respuestas del servidor proxy. Compresión: si el servidor proxy no envía respuestas comprimidas, puede configurar Nginx para comprimir las respuestas antes de enviarlas a los clientes. Mitigación de los ataques DDoS: puede limitar las solicitudes entrantes y el número de conexiones por dirección IP a un valor típico para los usuarios normales. Nginx también le permite bloquear o restringir el acceso en función de la ubicación del cliente y el valor de los encabezados de solicitud como "User-Agent" y "Referer".

Este artículo describe los pasos necesarios para configurar Nginx como proxy inverso.

Prerrequisitos

Asumimos que tiene instalado Nginx en su servidor Ubuntu, CentOS o Debian.

Usando Nginx como un proxy inverso

Para configurar Nginx como un proxy inverso a un servidor HTTP, abra el archivo de configuración de bloqueo del servidor del dominio y especifique una ubicación y un servidor proxy dentro de él:

server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }

La URL del servidor proxy se configura con la directiva proxy_pass y puede usar HTTP o HTTPS como protocolo, nombre de dominio o dirección IP, y un puerto opcional y URI como dirección.

La configuración anterior le dice a Nginx que pase todas las solicitudes a la ubicación /app al servidor proxy en http://127.0.0.1:8080 .

En las distribuciones basadas en Ubuntu y Debian, los archivos de bloqueo del servidor se almacenan en el directorio /etc/nginx/sites-available , mientras que en CentOS en el directorio /etc/nginx/conf.d .

Para ilustrar mejor cómo funcionan las directivas location y proxy_pass , tomemos el siguiente ejemplo:

server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }

Si un visitante accede a http://example.com/blog/my-post , Nginx enviará esta solicitud a http://node1.com:8000/wordpress/my-post .

Cuando la dirección del servidor proxy contiene un URI, ( /wordpress/ ), el URI de solicitud que se pasa al servidor proxy se reemplaza por un URI especificado en la directiva. Si la dirección del servidor proxy se especifica sin un URI, el URI completo de la solicitud se pasa al servidor proxy.

Pasar encabezados de solicitud

Cuando Nginx envía una solicitud por proxy, define automáticamente dos campos de encabezado en las solicitudes por proxy del cliente, Host y Connection , y elimina los encabezados vacíos. Host está configurado en la variable $proxy_host y la Connection está configurada para cerrarse.

Para ajustar o establecer encabezados para conexiones proxy, use la directiva proxy_set_header , seguida del valor del encabezado. Puede encontrar una lista de todos los encabezados de solicitud disponibles y sus valores permitidos aquí. Si desea evitar que se pase un encabezado al servidor proxy, configúrelo en una cadena vacía "" .

En el siguiente ejemplo, estamos cambiando el valor del campo del encabezado Host a $host y eliminando el campo del encabezado Accept-Encoding estableciendo su valor en una cadena vacía.

location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }

Siempre que modifique el archivo de configuración, debe reiniciar el servicio Nginx para que los cambios surtan efecto.

Configuración de Nginx como proxy inverso para un servidor proxy no HTTP

Para configurar Nginx como un proxy inverso a un servidor proxy no HTTP, puede usar las siguientes directivas:

  • fastcgi_pass - proxy inverso a un servidor FastCGI. uwsgi_pass : proxy inverso a un servidor uwsgi. scgi_pass - proxy inverso a un servidor SCGI. memcached_pass - proxy inverso a un servidor Memcached.

Uno de los ejemplos más comunes es usar Nginx como proxy inverso a PHP-FPM:

server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }

Opciones comunes de proxy inverso de Nginx

Servir contenido a través de HTTPS se ha convertido en un estándar hoy en día. En esta sección, le daremos un ejemplo de la configuración del proxy inverso Nginx HTTPS, incluidos los parámetros y encabezados del proxy Nginx recomendados.

location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }

  • proxy_http_version 1.1 : define la versión del protocolo HTTP para el proxy, de manera predeterminada, se establece en 1.0. Para las conexiones Websockets y keepalive , debe usar la versión 1.1. proxy_cache_bypass $http_upgrade : establece las condiciones bajo las cuales la respuesta no se tomará de un caché. Upgrade $http_upgrade y Connection "upgrade" : estos campos de encabezado son obligatorios si su aplicación usa Websockets. Host $host : la variable $host en el siguiente orden de precedencia contiene: nombre de host de la línea de solicitud, o nombre de host del campo de encabezado de solicitud de Host , o el nombre del servidor que coincide con una solicitud. X-Real-IP $remote_addr : X-Real-IP $remote_addr la dirección IP remota del visitante real al servidor proxy. X-Forwarded-For $proxy_add_x_forwarded_for : una lista que contiene las direcciones IP de cada servidor a través del cual se ha enviado proxy al cliente. X-Forwarded-Proto $scheme : cuando se usa dentro de un bloque de servidor HTTPS, cada respuesta HTTP del servidor proxy se reescribe en X-Forwarded-Host $host : define el host original solicitado por el cliente. X-Forwarded-Port $server_port : define el puerto original solicitado por el cliente.

Conclusión

Has aprendido a usar Nginx como un proxy inverso. También le hemos mostrado cómo pasar parámetros adicionales al servidor y modificar y establecer diferentes campos de encabezado en las solicitudes proxy.

nginx