2017-10-04 7 views
0

Je simple course de conteneurs docker de la manière suivante:letsencrypt Webroot donne 404 pour nginx situé dans docker

docker service create --name nginx_proxy \ 
    --mount type=bind,source=/opt/nginx/conf.d,target=/etc/nginx/conf.d \ 
    --mount type=bind,source=/opt/nginx/webroot,target=/var/webroot \ 
    --constraint 'node.role==manager' \ 
    --publish 80:80 --publish 443:443 \ 
    --network nginx-net \ 
    nginx 

Le service créé fonctionne sans problèmes. J'ai ajouté un exemple de configuration proxy passe à un autre service dans le même réseau (example.com.conf): (www.)

server { 
    listen 80; 
    server_name example.com www.example.com; 
    location /.well-known/acme-challenge { 
    alias /var/webroot; 
    } 

    location/{ 
    proxy_pass http://example_site:8080; 
    } 
} 

Quand je vais à example.com, je peux voir mon site. Depuis que j'ai monté l'hôte:/opt/nginx/webroot dans le conteneur:/var/webroot, j'ai créé un fichier dans/opt/nginx/webroot appelé "test.html" (le contenu du fichier n'a pas d'importance).

Quand j'ouvrir mon navigateur et tapez:

http://example.com/.well-known/acme-challenge/test.html 

Je peux voir le fichier que j'ai ajouté à/opt/nginx/Webroot. Toutefois, certbot lance 404 lorsque j'exécute la commande suivante:

certbot certonly --dry-run --webroot -w /opt/nginx/webroot -d example.com -d www.example.com 

Que manque-t-il ici? À mon avis, certbot crée un fichier dans le répertoire webroot et essaie de télécharger le fichier publiquement; Cependant, il ne voit pas mon fichier pour une raison quelconque.

+0

vous pouvez afficher les journaux de certbot et nginx? – Moema

Répondre

0

Je crois que votre problème peut être dû à une mauvaise compréhension de l'option -w dans la commande certbot. -w ou --webroot-path spécifie le répertoire de niveau supérieur contenant les fichiers servis par votre serveur Web.

Certbot créera des sous-dossiers à cet effet pour le défi acme, dans votre cas, certbot créera /opt/nginx/webroot/.well-known/acme-challenge/ mais votre configuration nginx pointe vers le site Web lui-même.

https://certbot.eff.org/docs/using.html#webroot

Pensez à changer

location /.well-known/acme-challenge { 
    alias /var/webroot; 
    } 

à quelque chose comme ça

location /.well-known/acme-challenge { 
    alias /var/webroot/.well-known/acme-challenge; 
    }