Infelizmente, acho que a melhor resposta é separar seus servidores em http e https. Eu tenho em torno de uma dúzia de sites no meu servidor web, eu tenho servidor três blocos de servidores por domínio - link serve o tráfego, os outros três apenas para a frente ( link . http: //, https: //).
Geralmente, você não quer veicular o mesmo conteúdo em http e https para SEO, pelo menos não sem deixar claro qual é o conteúdo canônico (ou seja, o principal).
Obviamente, a configuração abaixo é apenas relevante para essa resposta, não para uma configuração completa.
# Main Nginx config file
http {
gzip on;
# https site, usually in a file with any other servers for this domain
server {
server_name www.example.com;
listen 443 ssl http2;
gzip off;
}
# http site that forwards to https
server {
server_name www.example.com example.com;
listen 80;
server_name example.com www.example.com;
access_log /var/log/nginx/access.log;
return 301 https://www.example.com$request_uri;
}
# https / non www server skipped as it's obvious
}
Redução da duplicação
Se você realmente deseja veicular o mesmo site em http e https e quiser reduzir a duplicação de itens como suas configurações de local, é possível fazer algo assim. O server_name e vai no arquivo incluído, mas isso é um pouco opaco.
# https site, usually in a file with any other servers for this domain
server {
server_name www.example.com;
listen 443 ssl http2;
gzip off;
# include the locations, which is common to http and https
include /etc/nginx/sites-enabled/example_com_location.conf;
}
# http site that forwards to https
server {
server_name www.example.com example.com;
listen 80;
server_name example.com www.example.com;
include /etc/nginx/sites-enabled/example_com_location.conf;
}