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.

HTTP nginx a HTTPS proxy_pass devuelve 504 BAD Gateway

Estoy intentando crear un proxy_pass a una dirección https (mi nginx se está ejecutando en el puerto 80 utilizando el protocolo HTTP sin cifrar).

Esta es mi declaración en el archivo de configuración:

location /viacep/ {
    proxy_pass https://viacep.com.br/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Bueno, la idea es que cuando ingreso a “localhost/viacep/ws/09340400/json” obtenga la siguiente dirección resuelta en el fondo: “https://viacep.com.br/ws/09340400/json”. Pero obtengo el siguiente error en el archivo error.log:

2021/12/28 09:32:59 

34664#0: *1 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: , request: "GET /viacep/ws/09540400/json HTTP/1.1", upstream: "https://165.227.126.241:443/ws/09540400/json", host: "localhost"

Imagino que este error ocurre debido a la dirección resuelta (https://165.227.126.241:443/ws/09540400/json), ya que utiliza la IP en lugar del DNS.

Edit 1

He intentado agregar “proxy_ssl_server_name on;”, pero obtengo el mismo error.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Según el mensaje de error, parece que nginx no puede establecer una conexión con el servidor de origen. Esto puede deberse a varias razones, como una configuración incorrecta, problemas de red o problemas en el lado del servidor. Aquí hay algunos pasos que puedes seguir para solucionar este problema:

    1. Verifica que el servidor de origen esté en funcionamiento y que sea accesible desde tu servidor nginx. Puedes intentar hacer ping al servidor o usar telnet para establecer una conexión al servidor en el puerto 80 o 443.
    2. Verifica el archivo de configuración de nginx para asegurarte de que la directiva proxy_pass esté configurada correctamente. En tu caso, la configuración parece correcta, pero podrías intentar especificar la URL completa en lugar de usar una ruta relativa. Por ejemplo:

    proxy_pass https://viacep.com.br/ws/09340400/json;
    
    1. Verifica si hay reglas de firewall o políticas de seguridad que puedan estar bloqueando la conexión entre nginx y el servidor de origen. Puedes intentar desactivar temporalmente el firewall o abrir los puertos necesarios para probar si se resuelve el problema.

    2. Habilita el registro de depuración en nginx para obtener información más detallada sobre el error. Puedes agregar las siguientes directivas a tu archivo de configuración:

    error_log /var/log/nginx/debug.log debug;
    
    1. Verifica los registros en el servidor de origen para ver si está devolviendo algún error o si está bloqueando la conexión desde nginx.

    2. Si aún no puedes resolver el problema, puedes intentar usar una herramienta de terceros como curl o wget para hacer una solicitud directa al servidor de origen y ver si devuelve algún error o problema.

    En general, parece que el problema podría estar relacionado con la resolución DNS o la conectividad de red entre nginx y el servidor de origen. Aquí hay algunos consejos adicionales que podrías probar:

    • Usa la directiva resolver en la configuración de nginx para especificar el servidor DNS a utilizar. Por ejemplo:
    resolver 8.8.8.8;
    
    • Usa la directiva ip_hash para equilibrar las solicitudes a múltiples servidores de origen en función de su dirección IP. Esto puede ayudar a evitar problemas con la resolución DNS. Por ejemplo:
    upstream viacep {
        ip_hash;
    
        server viacep1.com.br;
        server viacep2.com.br;
    }
    
    server {
        location /viacep/ {
            proxy_pass http://viacep;
        }
    }
    
    • Usa la directiva proxy_set_header para enviar encabezados adicionales al servidor de origen. Por ejemplo, podrías intentar agregar el encabezado Connection para forzar conexiones persistentes:
    location /viacep/ {
        proxy_pass https://viacep.com.br/;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    

    Esperemos que uno de estos pasos te ayude a resolver el problema y permita pasar las solicitudes al servidor de origen a través de HTTPS.

Comments are closed.