Seu bloco de servidor da porta 80 não é o padrão. Tente adicionar default_server
na sua definição de porta 80.
server {
listen 80 default_server;
....
}
Quero redirecionar todas as solicitações para https. Ele funciona para a página principal agora, então estou tentando obter o link que me redireciona para https. Mas então eu vou sublink como link que nunca me redireciona. E aqui está minha configuração.
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name my.domain.com;
ssl on;
ssl_certificate /path/ssl.crt;
ssl_certificate_key /path/server.key;
location / {
root /home/uploader/datadir/;
index index.html index.htm;
}
}
Abaixo está a configuração testada e funcionando corretamente:
server {
listen 80; # Default listen port
server_name mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
ssl on ;
server_name mydomain.com;;
....
}
Mais uma maneira de fazer isso:
server {
listen 80; # Default listen port
if ( $host = domain.com ) { rewrite ^/(.*)$ https://domain.com/$1 permanent; }
server_name domain.com;
......
}
server {
listen 443;
ssl on;
server_name domain.com;
ssl_certificate /etc/nginx/conf.d/certificates/domain.com.crt;
ssl_certificate_key /etc/nginx/conf.d/certificates/domain.com.key;
.......
}
O principal problema para os meus olhos é que você não está usando a diretiva server_name de modo que o nginx não saiba o que está sendo reescrito. Com o bit SSL removido:
server {
listen 80;
server_name *.mydomain.com mydomain.com
return 301 https://$host$request_uri;
}
server {
listen 443;
#include snippets/certloc.conf
server_name my.domain.com;
location / {
root /home/uploader/datadir/;
index index.html index.htm;
}
}