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?

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.