es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Instancia EC2 y balanceador de carga con proxy inverso Nginx.

Estoy un poco confundido con la configuración de Nginx cuando se trata de un balanceador de carga.

Esta es mi situación.

En aws tengo un balanceador de carga para controlar el tráfico de 2 instancias de EC2.

La configuración predeterminada de Nginx funciona perfectamente, de hecho si abro directamente la dirección IP de las instancias de EC2 en mi navegador, veo la página de nginx. Lo mismo si uso el nombre dns del balanceador de carga, veo la página predeterminada de nginx.

Para fines de demostración. Configuré mi archivo nginx.conf de la siguiente manera:

server {
    listen   80; ## escucha ipv4; esta línea es predeterminada e implícita
    listen vm-ip:80;

server_name vm-ip;

root /usr/share/nginx/html;
index index.html;

server_tokens  off; # desactivar el encabezado del servidor nginx

# habilitar gzip
gzip on;
gzip_disable "msie6";

gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_types
    text/plain
    text/css
    text/js
    text/xml
    text/javascript
    application/javascript
    application/x-javascript
    application/json
    application/xml
    application/rss+xml
    image/svg+xml;

location / {
    # try_files $uri /index.html; # redirige todas las solicitudes a index.html
    proxy_pass https://<dns del="" sitio="" web="" al="" que="" quiero="" redirigir="">;

}

Establecí el mismo nginx.conf para ambas instancias de EC2. Después de esta configuración, intenté acceder a la dirección IP de las instancias de EC2 directamente y fui redirigido correctamente al sitio web que quería. Pero aquí está el problema, cuando intento hacer lo mismo abriendo el balanceador de carga en mi navegador, todavía veo la página predeterminada de nginx.

¿Puede alguien explicarme, por favor, qué estoy haciendo mal aquí?

Y por favor, si mi pregunta no es lo suficientemente clara, solo pídanme más información y estaré más que feliz de proporcionar una respuesta.

Muchas gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que has configurado Nginx para redireccionar solicitudes a un sitio web específico utilizando la directiva proxy_pass. Esto funciona cuando accedes directamente a las instancias EC2, pero no cuando pasas por el balanceador de carga.

    Esto probablemente se debe a que el balanceador de carga no está configurado para pasar el encabezado de host original a las instancias de backend. Sin este encabezado, Nginx no sabe a qué sitio web quieres redireccionar y utiliza la configuración predeterminada.

    Para solucionarlo, puedes agregar las siguientes líneas a tu configuración de Nginx:

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    Estas líneas establecen el encabezado de host en el valor original y también pasan la dirección IP real del cliente y el encabezado original X-Forwarded-For a la instancia de backend. También deberás asegurarte de que tu balanceador de carga esté correctamente configurado para pasar estos encabezados.

    Una vez realizados estos cambios, deberías poder acceder al sitio web redireccionado a través del balanceador de carga también.

    ¡Espero que esto te ayude! Avísame si tienes alguna otra pregunta.

Comments are closed.