
웹 애플리케이션에 액세스하기 위해 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/;
}
후행 슬래시는 요청을 경로와 함께 전달합니다.