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.
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.