Redirección de ruta relativa incorrecta con Nginx

Redirección de ruta relativa incorrecta con Nginx

Quiero implementar un proxy inverso con Nginx para acceder a una aplicación web. Tuve dificultades con las redirecciones. Por ejemplo, digamos que tengo un servidor http Python (en la práctica, no puedo modificar la configuración/código del servidor):

import http.server
import socketserver

class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/login':
            self.path = 'login.html'
        elif self.path == '/':
            self.send_response(301)
            self.send_header('Location', '/login')
            self.end_headers()
        return http.server.SimpleHTTPRequestHandler.do_GET(self)

handler_object = MyHttpRequestHandler
serv = socketserver.TCPServer(("127.0.0.1", 8080), handler_object)

Tengo la siguiente configuración para Nginx:

location /app {
        proxy_pass http://127.0.0.1:8080;
}

Cuando voy ahttps://miip/aplicación/, debería ser redirigido ahttps://miip/app/login. Pero en lugar de eso, soy redirigido ahttps://miip/login, que no está enrutado. Probé diferentes parámetros como proxy_redirect, proxy_headers... sin éxito.

Respuesta1

Su aplicación Python está redirigiendo a /login, por lo que el navegador solicitará

https://myip/login

Lo que luego pasa por alto su /appbloqueo de ubicación.

Realmente no puedo darte una respuesta porque no sé cuáles son tus requisitos, pero lo siguiente funcionará:

Cambia tu redireccionamiento a/app/login

En su caso, debe decirle a Nginx que desea agregar el URI en la solicitud reenviada:

En su configuración de Nginx, agregue $request_url a la solicitud reenviada:

location /app {
    proxy_pass http://127.0.0.1:8080$request_uri;
}

Para mí, esta es una solución un tanto frágil, que supone que debes tenerla /appcomo ubicación.

Idealmente, debería realizar un proxy inverso del URI raíz location /a la aplicación Python para eliminar estas y otras posibles anomalías. Luego puede crear excepciones específicas en la configuración de Nginx si hay ciertas solicitudes (por ejemplo, CDN) que no deberían ir a la aplicación Python.

Respuesta2

Esto debería funcionar

    > location /app {
    >         proxy_pass http://127.0.0.1:8080/; 
}

la barra diagonal reenviará su solicitud con la ruta.

información relacionada