Redirecione todas as solicitações para HTTPS, exceto um subdiretório

13

Estou tentando passar de certificados autoassinados para certificados Let's Encrypt no meu servidor nginx.

Atualmente, redireciono todas as solicitações para http/80para https/443, que usa um certificado autoassinado que criei há um tempo.

Agora - pelo que entendi, o Let's Encrypt faz uma solicitação para a porta 80 (como estou usando a webrootopção de certbot). Essas solicitações são redirecionadas, o que torna a geração do certificado malsucedida.

Tentei fazer isso com o seguinte bloco de servidor, ouvindo na porta 80:

server {
        listen  80;     
        server_name     sub.domain.tld;
        server_tokens   off;


        location /.well-known {
                root /var/www/letsencrypt;
        }

        location / {
                return 301 https://$host$request_uri;
        }
}

Mas os pedidos de /.well-knownsão redirecionados para https/443qualquer maneira.

Como redirecionar todas as solicitações de http/80para https/443, exceto as solicitações de /.well-known/?

SaAtomic
fonte
1
Tanto quanto sei, a opção webrootof certbotrequer http simples.
SaAtomic
2
Como você verificou o redirecionamento? Eu acho que seu navegador respeita os cabeçalhos HSTS do seu domínio, mas vamos criptografar o bot ignorá-lo. Verifique com wget/curl
Alexey Ten

Respostas:

17

Tente o seguinte:

server {
    listen  80;     
    server_name     sub.domain.tld;
    server_tokens   off;

    root /var/www/letsencrypt;

    location /.well-known {
        try_files $uri $uri/ =404;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

Como não havia try_filesentrada no seu servidor virtual, ele não sabia o que fazer com as solicitações recebidas /.well-known.

Tero Kilkanen
fonte
2
locationsem try_filesapenas envia arquivo do rootdiretório.
Alexey Ten
1
estranho, eu tenho exatamente a mesma situação e eu não uso try_filese funciona perfeitamente bem para mim. Na verdade, eu tenho exatamente a mesma configuração, como indicado na pergunta. A única diferença é em location /.well-known/vez de location /.well-known(observe a barra à direita). Então talvez seja aí que está o problema?
Olle Kelderman