Nginx의 잘못된 상대 경로 리디렉션

Nginx의 잘못된 상대 경로 리디렉션

웹 애플리케이션에 액세스하기 위해 Nginx로 역방향 프록시를 구현하고 싶습니다. 리디렉션에 어려움을 겪었습니다. 예를 들어 Python http 서버가 있다고 가정해 보겠습니다(실제로는 서버 설정/코드를 수정할 수 없습니다).

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)

Nginx에 대해 다음 구성이 있습니다.

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

내가 갈 때https://myip/app/, 다음으로 리디렉션되어야 합니다.https://myip/app/login. 하지만 그 대신 다음으로 리디렉션됩니다.https://myip/로그인, 라우팅되지 않습니다. 나는 Proxy_redirect, Proxy_headers와 같은 다른 매개변수를 시도했지만 성공하지 못했습니다.

답변1

귀하의 Python 애플리케이션이 로 리디렉션 중이므로 /login브라우저는 다음을 요청합니다.

https://myip/login

그런 다음 /app위치 블록을 우회합니다.

귀하의 요구 사항이 무엇인지 모르기 때문에 실제로 답변을 드릴 수는 없지만 다음은 작동합니다.

리디렉션을 다음으로 변경하세요./app/login

귀하의 경우 전달된 요청에 URI를 추가하고 싶다고 Nginx에 알려야 합니다.

Nginx 구성에서 전달된 요청에 $request_url을 추가합니다.

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

나에게 이것은 당신이 당신의 위치로 가지고 있어야 한다고 가정하는 다소 불안정한 솔루션입니다 /app.

이상적으로는 루트 URI를 location /Python 앱으로 역방향 프록시하여 이러한 문제와 기타 잠재적인 이상 현상을 제거해야 합니다. 그런 다음 Python 애플리케이션으로 이동해서는 안 되는 특정 요청(예: CDN)이 있는 경우 Nginx 구성에서 특정 예외를 생성할 수 있습니다.

답변2

이게 작동해야 해

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

후행 슬래시는 요청을 경로와 함께 전달합니다.

관련 정보