Eu tenho um problema estranho com um / à direita
Estou usando o nginx e está funcionando corretamente com uma pequena exceção.
Eu tenho a seguinte configuração de site
server {
listen 80;
return 301 https://$server_name$request_uri/;
server_name sub1.sub2.domain.com;
}
server {
listen 443 ssl; # The ssl directive tells NGINX to decrypt
# the traffic
server_name sub1.sub2.domain.com;
ssl_certificate /etc/nginx/ssl/sub1.sub2.domain.com/server.crt; # This is the certificate file
ssl_certificate_key /etc/nginx/ssl/sub1.sub2.domain.com/server.key; # This is the private key file
location / {
proxy_pass http://1.1.1.1:8880;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Eu tenho um serviço de autenticação externa executando e protegendo uma subpasta chamada segura, portanto, se uma solicitação de /secure ou /secure/ for solicitada, ela será enviada para o serviço de autenticação externa. Depois de autenticados, eles são redirecionados de volta para o url solicitado inicialmente. Se após a autenticação eles solicitarem /secure/ tudo funcionará perfeitamente. Se eles digitarem /secure (sem / à direita), o nginx fará um redirecionamento 301 após a autenticação e substituirá https por http, para que eles acessem http://sub1.sub2.domain.com/secure e, em seguida, façam outro redirecionamento de volta para https
Pelo que li aqui http://nginx.org/en/docs/http/ngx_http_core_module.html#location este é o comportamento correto, mas a solução para definir /secure/ e /secure como arquivos de localização separados não parece funcionar e também não menciona nada nesse exemplo sobre a mudança de https para http. Qualquer ajuda seria muito apreciada.
Você está adicionando explicitamente a barra final em seu redirecionamento:
Isso obviamente não é o que você quer.
Portanto, não adicione uma barra à direita:
Seu aplicativo é responsável por isso e isso porque você precisa encaminhar o esquema atual com cabeçalhos extras, como
X-Forwarded-Proto
desde que você desativou , oproxy_redirect
que significa que os redirecionamentos são deixados intactos de seu servidor upstream e enviados diretamente aos visitantes sem que o nginx o torne relativo ao contexto de localização ou ao esquema sendo usado no bloco de servidor atual.Portanto, corrija-o ou use o nginx de
proxy_redirect
uma maneira relevante.Acontece que a documentação estava certa (quem diria), eu introduzi mais problemas ao tentar resolver o primeiro problema do trailing /
Consegui corrigir o problema fazendo as seguintes alterações.
(Removendo o / à direita para o redirecionamento http)
Isso realiza um redirecionamento para quem não colocar / no final do seguro antes de ir para o serviço de autenticação.
Isso reescreve cada redirecionamento http do aplicativo para https