Estou tendo problemas para fazer meu proxy reverso funcionar ao usar um caminho no nginx. O que estou tentando fazer é ter um endereço para um aplicativo e ditar o ambiente com o caminho. Dependendo do caminho, apontaria para um servidor diferente. Consigo fazer o proxy reverso funcionar ao usar um link direto, mas usar um caminho está recebendo um erro 404.
app.foo.bar/dev = erro 404 devapp.foo.bar = sucesso
O que fiz de errado em app.foo.bar/dev ?
Aqui está a configuração do proxy reverso que está funcionando, mas prefiro não usar:
server {
listen 80; # DEV Application Proxy
server_name devapp.foo.bar;
location / {
proxy_pass http://appserver.foo.bar:7010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://appserver.foo.bar:7010/ /;
proxy_connect_timeout 300;
}
}
Aqui está uma parte do que desejo fazer usando o caminho, mas obtendo o erro 404.
# APP Environment Proxy
server {
listen 80;
server_name app.foo.bar;
location /dev {
proxy_pass http://appserver.foo.bar:7010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://appserver.foo.bar:7010 /;
proxy_connect_timeout 300;
}
}
Pesquisei esse tipo de configuração no Google, mas não consigo encontrar uma solução. Agradecemos antecipadamente por qualquer ajuda.
Responder1
Quando você tiver proxy_pass http://appserver.foo.bar:7010;
, o nginx anexa o URI normalizado ao URL de solicitação passado ao back-end.
Então, quando você solicita http://app.foo.bar/dev
, a solicitação vai para http://appserver.foo.bar:7010/dev
. Se o seu servidor de desenvolvimento não tiver esse caminho, ele retornará 404, que o nginx retorna ao cliente.
Se você quiser que todas as solicitações começando por http://app.foo.bar/dev
irem http://appserver.foo.bar:7010
para que todo o restante do URI seja adicionado ao URI do servidor back-end, você poderá usar esta configuração:
location ~ ^/dev(.+)$ {
proxy_pass http://appserver.foo.bar:7010$1$is_args$args;
...
}
Então, capturamos a parte posterior /dev
com regex em uma variável e então adicionamos essa variável ao final do proxy_pass
caminho.