Atlasingeniería

Incidentes en un servidor propioConfiguración que se edita y no se aplicaTema 2

El proxy que mandaba la ruta equivocada

Una aplicación servida bajo un prefijo devolvía 404 en todo menos la home. El proxy reenviaba correctamente y la barra final cambiaba el significado de la regla. Cómo se depura un problema que sólo existe con el proxy en el medio.

Una aplicación que funciona perfecto en su contenedor deja de funcionar cuando se la publica bajo un prefijo de ruta. La página principal carga; todo lo demás da 404, o carga sin estilos.

No hay nada roto en la aplicación. Lo que cambió es que, en el camino, alguien reescribe la ruta, y la aplicación recibe algo distinto de lo que el navegador pidió.

El detalle que cambia todo: la barra final

En la mayoría de los proxies, que el destino termine o no en barra decide si el prefijo se recorta o se conserva. Es una diferencia de un carácter con dos comportamientos opuestos.

ConfiguraciónEl navegador pideLa aplicación recibe
Destino sin barra final/app/clientes/app/clientes
Destino con barra final/app/clientes/clientes
Las dos son correctas; cuál corresponde depende de si la aplicación sabe que vive bajo un prefijo.

De ahí salen los dos síntomas clásicos. Si la aplicación no sabe del prefijo y no se lo recortás, no encuentra ninguna ruta. Si la aplicación lo sabe y se lo recortás, genera enlaces con el prefijo hacia rutas que ella misma ya no reconoce.

Por qué la home carga y el resto no

El síntoma de “carga sin estilos” tiene una causa propia: las referencias absolutas.

La secuencia

  1. El documento se pide bajo el prefijo y llega bien.
  2. Adentro hay referencias a recursos que empiezan con barra: sin el prefijo.
  3. El navegador las pide desde la raíz del dominio.
  4. Ahí no hay nada, o hay otra aplicación. Los recursos dan 404 y la página se ve sin estilos ni comportamiento.

Lo otro que se pierde en el camino

Además de la ruta, hay información que la aplicación necesita y que sólo el proxy conoce.

Lo que hay que reenviar

  1. El host original. Sin él, la aplicación arma enlaces con el nombre interno del contenedor.
  2. El esquema original. El proxy habla en claro con la aplicación; si ésta no sabe que afuera es cifrado, genera redirecciones que degradan la conexión.
  3. La IP del cliente. Lo que ve la aplicación es la IP del proxy: sin esta cabecera, todos los registros y los límites por origen apuntan al mismo lugar.
  4. El prefijo, cuando el framework lo soporta, para que genere las rutas correctas por sí mismo.

Antes de seguir, predecí

Una aplicación detrás de un proxy registra siempre la misma IP en todos los accesos. ¿Qué falta?

Cómo se depura

La regla que ahorra más tiempo es determinar de qué lado está el problema antes de tocar configuración.

Cuatro pasos, en orden

  1. Pedirle directo al contenedor, desde el mismo servidor, la misma ruta que falla. Si responde bien, el problema es del proxy.
  2. Mirar qué ruta recibe la aplicación, en sus propios registros. Ahí se ve si el prefijo se recortó o no.
  3. Mirar la respuesta cruda, con encabezados, en vez de la página renderizada. Un 301 hacia un destino inesperado se ve ahí y no en el navegador.
  4. Recién entonces, cambiar una sola cosa. Con dos cambios a la vez no se sabe cuál funcionó.
Más a fondo · nivel seniorEl reload que no aplica lo que estás leyendo

Un detalle que hace perder tardes: si el archivo de configuración está montado dentro del contenedor y se lo reemplaza desde afuera de cierta manera, el proceso puede seguir viendo el contenido anterior aunque el archivo en disco ya esté nuevo. Se recarga, se prueba, no cambia nada, y uno concluye que la configuración está mal cuando en realidad nunca se aplicó. Ante la duda, reiniciar el contenedor en vez de recargar.

La reescritura en el log

Buscá en el log

La aplicación se publicó bajo /panel. La página principal carga y todo lo demás da 404. ¿Qué línea muestra qué está recibiendo la aplicación?

debug 3info 6warn 2error 011 de 11

Cómo se decide de una vez

Cierre

Autoevaluación

¿Lo entendiste?

Una aplicación bajo un prefijo carga la home pero sin estilos. ¿Cuál es la causa más probable?
¿Cuál es el primer paso para depurar un 404 que sólo aparece a través del proxy?