Para que o HSTS funcione corretamente, você precisa redirecionar de http para https no mesmo nome de host e, em seguida, redirecionar em https do primeiro nome de host para o segundo nome de host.
Isso também significa que ambos os nomes de host devem ter um certificado TLS. O ideal é que eles sejam nomes alternativos no mesmo certificado, para simplificar a manutenção.
Aqui está um exemplo de trabalho ao vivo retirado de um dos meus sites de produção:
server {
server_name www.yes-www.org yes-www.org;
include includes/listen-80;
include includes/cloudflare;
include includes/letsencrypt;
access_log off;
return 301 https://$host$request_uri;
}
Acima, simplesmente redirecionamos de http para https no mesmo nome de host, o que quer que seja.
server {
server_name yes-www.org;
ssl_certificate /etc/letsencrypt/live/www.yes-www.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.yes-www.org/privkey.pem;
include includes/listen-443;
include includes/cloudflare;
include includes/ssl;
include includes/ssl_stapling;
include includes/hsts;
include includes/letsencrypt;
return 301 https://www.yes-www.org$request_uri;
}
Aqui, redirecionamos de um nome de host para outro em https. O nome do host de destino está na diretiva return
.
Se você tiver nomes de host adicionais para redirecionar de um nome de host para o nome do host de destino, todos eles poderão ser veiculados no mesmo bloco server
, desde que todos compartilhem o mesmo certificado TLS. Caso contrário, duplique o bloco server
.
server {
server_name www.yes-www.org;
root /srv/www/yes-www.org;
access_log /var/log/nginx/yes-www.org-access.log nginx;
access_log /var/log/nginx/cache.log cache;
error_log /var/log/nginx/yes-www.org-error.log;
ssl_certificate /etc/letsencrypt/live/www.yes-www.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.yes-www.org/privkey.pem;
include includes/listen-443;
include includes/cloudflare;
include includes/letsencrypt;
include includes/ssl;
include includes/ssl_stapling;
include includes/hsts;
# more directives to serve the web app itself
# which you should replace with your own directives
# to serve your own web app
}
E, claro, isso serve apenas para o site.