Eu tenho um local
location /pass/ {
proxy_pass http://localhost:12345/;
}
Portanto, é suposto fazer proxy de URLs http://example.com/pass/whatever
parahttp://localhost:12345/whatever
O que não gosto é que o nginx adiciona automaticamente uma barra
http://example.com/pass
e faz isso http://example.com/pass/
via redirecionamento 301
Como posso simplesmente evitar esse comportamento. Quero, /pass
sem barra final, ir para outro local. Desde já, obrigado!
Responder1
Há um caso especial em que a proxy_pass
com location
terminação em /
resultaria em um 301
redirecionamento implícito automático sem ir para o back-end; você precisa criar um explícito location
sem a barra final para evitar isso:
Se um local for definido por uma sequência de prefixo que termina com o caractere de barra e as solicitações forem processadas por proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass ou grpc_pass, o processamento especial será executado. Em resposta a uma solicitação com URI igual a esta string, mas sem a barra final, um redirecionamento permanente com o código 301 será retornado ao URI solicitado com a barra anexada. Se isso não for desejado, uma correspondência exata do URI e do local poderá ser definida assim:
location /user/ { proxy_pass http://user.example.com; } location = /user { proxy_pass http://login.example.com; }
Por exemplo, você precisa criar um explícito /pass
location
além do existente /pass/
, caso contrário, um implícito location /pass {return 301 /pass/…;}
será criado para você.
No entanto, você tem certeza de que realmente deseja fazer o que está tentando fazer? Se você omitir um redirecionamento de /pass
para /pass/
, os caminhos relativos não funcionarão. Alguns navegadores mais recentes também tendem a apresentar UI/UX defeituosos que podem não apresentar a barra final para o usuário, o que pode tornar as coisas ainda mais confusas ao tentar solucionar o problema da distinção.
Responder2
Como você quer que vá paraoutro local, uma solução natural é adicionar esse local
location /pass {
}
Por padrão, o nginx procurará um arquivo chamado ‘pass’ na raiz da web. Se você não gostar deste padrão, poderá adicionar mais diretivas dentro deste novo bloco de localização para conseguir isso.
Você também pode usar
location = /pass {
}
de modo que o nginx possa encontrar a correspondência um pouco mais rápido.