Redirige toutes les demandes vers HTTPS, sauf un sous-répertoire

13

J'essaie de passer des certificats auto-signés aux certificats Let's Encrypt sur mon serveur Web nginx.

Actuellement, je redirige toutes les demandes vers http/80vers https/443, qui utilise un certificat auto-signé que j'ai créé il y a quelque temps.

Maintenant - d'après ce que je comprends, Let's Encrypt fait une demande sur le port 80 (comme j'utilise l' webrootoption de certbot). Ces demandes sont redirigées, ce qui rend la génération de certificats infructueuse.

J'ai essayé d'y parvenir avec le bloc serveur suivant, en écoutant au port 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;
        }
}

Mais les demandes /.well-knownsont redirigées de https/443toute façon.

Comment puis-je rediriger toutes les demandes de http/80vers https/443, à l'exception des demandes vers /.well-known/?

SaAtomic
la source
1
Pour autant que je sache, la webrootd' certbotoption nécessite http plaine.
SaAtomic
2
Comment avez-vous vérifié la redirection? Je suppose que votre navigateur respecte les en-têtes HSTS pour votre domaine, mais chiffrons le bot l'ignorerait. Vérifiez avec wget/curl
Alexey Ten

Réponses:

17

Essaye ça:

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;
    }
}

Puisqu'il n'y avait aucune try_filesentrée dans votre serveur virtuel, il ne savait pas quoi faire avec les demandes qui arrivaient /.well-known.

Tero Kilkanen
la source
2
locationsans try_filesenvoie simplement le fichier du rootrépertoire.
Alexey Ten
1
bizarre, j'ai exactement la même situation et je ne l'utilise pas try_fileset cela fonctionne parfaitement bien pour moi. En fait, j'ai exactement la même configuration que celle indiquée dans la question. Seule la différence est location /.well-known/au lieu de location /.well-known(notez la barre oblique de fin). Alors, c'est peut-être là que réside le problème?
Olle Kelderman