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.
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:
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:
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.
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:
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.
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:
resolver
en la configuración de nginx para especificar el servidor DNS a utilizar. Por ejemplo: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:proxy_set_header
para enviar encabezados adicionales al servidor de origen. Por ejemplo, podrías intentar agregar el encabezadoConnection
para forzar conexiones persistentes: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.