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?
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.