Redireccionar una ruta secundaria a un host externo con Nginx

13

Necesito crear un mapa bastante simple en Nginx redirigiendo una subruta a otro servidor que se encuentre en la misma subred.

  • Servidor Nginx: 192.168.0.2
  • Servidor Tomcat: 192.168.0.3:8443

Traté de poner esto en la sección del servidor

    location /tomcatapi/ {
        rewrite /tomcatapi/(.*) $1 break;
        proxy_pass http://192.168.0.3:8443;
    }

pero todo lo que accedo a http://www.myservice.com/tomcatapi/ es una página de 500 errores y en el archivo de registro nginx tengo este error:

    the rewritten URI has a zero length

¿Qué me falta en esta conf?

carlo.polisini
fuente

Respuestas:

12

Veamos tu línea de reescritura:

rewrite /tomcatapi/(.*) $1 break;

Está tomando el bit entre paréntesis (es decir, todo lo que está después /tomcatapi/), que se asigna $1, y lo usa como el único contenido de su URI reescrito.

En su ejemplo, no hay nada después /tomcatapi/, por lo que la reescritura termina vacía, y esto es por lo que nginx se queja.

Si cambia la regla de reescritura a

rewrite /tomcatapi/(.*) /$1 break;

entonces siempre terminarás con al menos /en la salida de reescritura.

Flup
fuente
Gracias por su respuesta, de todos modos agregué el "/", pero ahora accediendo a la url, el navegador está atascado en el estado de carga y en el archivo de registro veo ahora un error diferente: el flujo ascendente no envió un encabezado HTTP / 1.0 válido al leer el encabezado de respuesta del flujo ascendente
carlo.polisini
¿Qué dicen los registros en su servidor Tomcat?
Flup
Encontré el error, ¡el error fue que la aplicación solo estaba disponible en https y no en http! Entonces, la sintaxis fue justo después de su corrección, simplemente reemplazó http con https para que funcione.
carlo.polisini