Eu tenho mais de 50 diretivas de correspondência de local no meu arquivo nginx do aplicativo da web. depois de fazer algumas alterações, estou preso a um loop de redirecionamento 302 em uma diretiva de localização chamada /login. ele continua redirecionando para 302 /login e nunca sai. existe alguma maneira nas diretivas nginx que eu possa configurar um ponto de interrupção, um log, a partir de quais diretivas de localização a solicitação passa? então eu tenho uma idéia de qual é o redirecionamento defeituoso ou a fonte de localização?
eu não acho que o log de depuração fornece essa informação.
Em suma, qual é a melhor maneira de rastrear a solicitação com precisão e de maneira muito detalhada entre toda a configuração
Em cada um dos seus blocos de localização, adicione um cabeçalho exclusivo para esse bloco. Usando esses cabeçalhos, você pode descobrir qual bloco é selecionado pelo Nginx, que pode ajudá-lo a depurar.
Você pode usar um único nome de cabeçalho se quiser, mas gostaria de saber se reescrever ou encaminhar ou algo assim poderia obscurecer o caminho pelo sistema para que eu não faça isso.
Visualize a URL/página usando o Firefox com o plugin Live HTTP Headers ou "curl -i". O cabeçalho que você adicionou informará qual(is) bloco(s) ele atinge. A vantagem dos Live HTTP Headers sobre o curl é que você não precisa continuar emitindo comandos, o Firefox seguirá os redirecionamentos e mostrará os cabeçalhos para cada solicitação/resposta.
Você precisa do módulo headers_more no Nginx para que o add_header funcione. Você pode verificar se o incluiu com "nginx -V". Se você não fizer isso, é relativamente fácil compilar o Nginx a partir do código-fonte .
Achei essa técnica incrivelmente útil quando estava aprendendo Nginx e configurando meus sites.
Por que você tem mais de 50 diretivas de correspondência de local? A solução correta pode ser usar a
map
diretiva.A maneira correta de depurar as alterações com consequências não intencionais é fazer o controle de revisão de suas alterações:
Se um monte de mudanças foram feitas e nunca testadas no meio, você pode usar algo como
git-bisect
descobrir a diretiva incorreta.Se você já conhece a mudança ofensiva, examinar cuidadosamente cada parte deve revelar o problema.
No entanto, com base no nome do host da sua captura de tela e examinando a resposta do seu servidor:
…, revela que esse problema provavelmente não está relacionado ao nginx e provavelmente é executado a montante:
é muito improvável que você tenha modificado o manipulador padrão do nginx 302 para fornecer texto como
<html><body>You are being <a href="https://www.groupsitedev.com/login">redirected</a>.</body></html>
, que não é o padrão; e um redirecionamento de um upstream ineficiente é muito mais provável (o nginx não forneceria esse texto personalizado (com um hiperlink) porque é ineficiente copiar o URL várias vezes assim, em uma página da Web que nenhum navegador moderno jamais aparecerá de qualquer forma)é muito improvável que você tenha configurado o nginx para emitir cookies de sessão, sozinho; um cookie do seu upstream é muito mais provável.
Assim, em resumo , não há nada para depurar no nginx - o redirecionamento está claramente vindo do seu upstream, sobre o qual você não nos revelou nada.