
Quero implementar um proxy reverso com Nginx para obter acesso a um aplicativo web. Encontrei dificuldades com redirecionamentos. Por exemplo, digamos que eu tenha um servidor http Python (na prática, não consigo modificar as configurações/código do 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)
Eu tenho a seguinte configuração para Nginx:
location /app {
proxy_pass http://127.0.0.1:8080;
}
Quando eu for parahttps://meuip/app/, eu deveria ser redirecionado parahttps://myip/app/login. Mas em vez disso, sou redirecionado parahttps://meuip/login, que não é roteado. Tentei parâmetros diferentes como proxy_redirect, proxy_headers... sem sucesso.
Responder1
Seu aplicativo python está redirecionando para /login
, então o navegador solicitará
https://myip/login
O que então ignora seu /app
bloqueio de localização.
Na verdade, não posso lhe dar uma resposta, pois não sei quais são seus requisitos, mas o seguinte funcionará:
Altere seu redirecionamento para/app/login
No seu caso, você precisa informar ao Nginx que deseja anexar o URI na solicitação encaminhada:
Na configuração do Nginx, adicione $request_url à solicitação encaminhada:
location /app {
proxy_pass http://127.0.0.1:8080$request_uri;
}
Para mim, esta é uma solução um tanto frágil, que pressupõe que você precisa ter /app
como localização.
Idealmente, você deve fazer proxy reverso do URI raiz location /
para o aplicativo python para remover essas e outras anomalias potenciais. Você pode então criar exceções específicas na configuração do Nginx se houver certas solicitações (por exemplo, CDN) que não devem ir para o aplicativo python.
Responder2
isso deve funcionar
> location /app {
> proxy_pass http://127.0.0.1:8080/;
}
a barra final encaminhará sua solicitação com o caminho.