Sous-domaines Nginx: Redirection du chemin /.well-known pour Let ‘s Encrypt

J’ai un serveur Nginx fonctionnant avec deux sous-domaines. L’un d’eux utilise un proxy_pass pour redirect tout vers une application Meteor et l’autre sous-domaine utilise simplement Laravel mais dans un répertoire différent du domaine normal.

Donc, quand je commence ./letsencrypt-auto j’obtiens le message d’erreur suivant pour les deux sous-domaines:

 Failed authorization procedure. subdomain.mydomain.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://subdomain.mydomain.com/.well-known/acme-challenge/xyzxyzxy_xzyzxyxyyx_xyzyxzyxz: " 404 Not Found  

404 Not Found

Mon interprétation de cela est que cela ne fonctionne pas parce que mon sous-domaine Laravel n’est pas dans /var/www/domain.com/html mais dans /var/www/laravel/html et que mon application Meteor est ailleurs et ngnix fait juste passer le proxy

Donc, ma question est la suivante: puis-je redirect /.well-known/acme-challenge pour les deux sous-domaines vers real /.well-known afin que letsencrypt-auto ne jette pas cette erreur?


Plus d’information:

J’ai essayé

 location '/.well-known/acme-challenge' { default_type "text/plain"; root /tmp/letsencrypt-auto; } 

mais ça n’a pas marché …

Configuration pour mon sous-domaine Meteor:

 server { listen 80; listen [::]:80; # SSL configuration listen 443 ssl; listen [::]:443 ssl; ssl_certificatee /etc/letsencrypt/live/domain.com/fullchain.pem; ssl_certificatee_key /etc/letsencrypt/live/domain.com/privkey.pem; […] SSL stuff […] server_name meteor.domain.com; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header X-Forwarded-For $remote_addr; } location ~ /.well-known { allow all; } } 

Config pour mon sous-domaine Laravel:

 server { listen 80; server_name laravel.domain.com; listen 443 ssl; listen [::]:443 ssl; ssl_certificatee /etc/letsencrypt/live/domain.com/fullchain.pem; ssl_certificatee_key /etc/letsencrypt/live/domain.com/privkey.pem; […] SSL stuff […] root /var/www/laravel/html; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ /.well-known { allow all; } location ~ \.(hh|php)$ { fastcgi_keep_conn on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 

Vos blocs location ~ /.well-known sont des emplacements de regex et ont priorité sur l’emplacement de préfixe que vous tentez d’append.

Vous devez les supprimer.

Voir ce document sur la directive de location .

Okay, grâce aux conseils de Richard Smith, je l’ai résolu:

Je l’ai gardé dans le Config-Part pour la partie domain.com comme décrit dans ce tutoriel.

 location / { try_files $uri $uri/ =404; } 

mais placez cela dans Config-Part pour subdomain.domain.com à la place:

 location /.well-known/ { root /var/www/domain.com/html; } 

Ce qu’il fait est de gérer toute demande de domain.com/.well-known/[anything] subdomain.domain.com/.well-known/[anything] nom de domain.com/.well-known/[anything] , donc aucune erreur de la part de letsencrypt-auto.