
Minha corrente nginx.conf
é mais ou menos assim:
server {
listen 80;
server_name www.example.com;
root /var/www/;
location / {
}
location /users {
rewrite ^ https://$http_host$request_uri? permanent;
}
}
server {
listen 443 ssl;
server_name www.example.com;
root /var/www/;
location /users {
}
location / {
rewrite ^ http://$http_host$request_uri? permanent;
}
}
Com esta configuração, a conexão muda de/para SSL/não SSL quando um usuário navega nas páginas do site, SSL para URLs iniciadas /users
e não SSL para todas as outras URLs. Como resultado, mesmo que o usuário digite explicitamente https://www.example.com/
na barra de endereço do navegador, a página resultante é redirecionada para http://www.example.com/
.
Existe uma maneira de implementar a reescrita automática de URL entre SSL/não SSL, conforme obtido pelas configurações acima, mas ainda respeitar a solicitação SSL explícita se https://
for digitada explicitamente pelo usuário na barra de endereços do navegador?
Responder1
Do ponto de vista do servidor não há como diferenciar a solicitação feita seguindo um link, rastreando um site ou digitando o endereço completo na barra de localização.
Quando você digita um endereço, o navegador envia uma solicitação HTTP ao seu servidor web. Se você digitou https, ele tentará se conectar à porta 443 (por padrão), e os cabeçalhos da solicitação não contêm informações se o usuário digitou a solicitação ou a solicitação ou, por exemplo, o bot a rastreou.
Tudo o que você pode fazer é manter o SSL para determinados agentes de usuário e redirecionar para outros.