Não, isso exigiria que você alterasse o comportamento do navegador. É tudo baseado em resposta de solicitação. O usuário digita example.com
em sua barra do navegador e o navegador adiciona automaticamente http://
na frente disso. Portanto, seu servidor sempre obterá a primeira solicitação em http://example.com
e você só poderá responder com um redirecionamento para seu endereço SSL ativado se não houver nada sem SSL.
Negar o pedido, como proposto por Nathan, não é uma opção. Porque o navegador irá exibir uma página de erro que este site não está acessível e pode até não existir.
Mas há outra coisa que você pode fazer: Segurança de Transporte Restrita HTTP (HSTS)
O HSTS informa ao navegador que seu site só pode ser acessado via SSL e que as solicitações subsequentes devem sempre ser preenchidas automaticamente com https://
em vez de http://
. Você pode conseguir isso no nginx com as seguintes linhas no seu bloco de servidor SSL:
add_header Strict-Transport-Security "max-age=262974383";
http {
# One server listening on port 80 and sending the redirect to HTTPS
server {
server_name example.com;
return 301 https://$server_name$request_uri;
}
# Our actual server handling incoming requests.
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/my_site.pem;
ssl_certificate_key /etc/ssl/my_site.key;
# Tell the browser that he should always visit us with SSL.
add_header Strict-Transport-Security "max-age=262974383";
}
}