Как пройти проверку Let’s Encrypt или отдать файл с помощью nginx, при использовании nodejs?

Пытаюсь получить сертификат от Let’s Encrypt, но не получается пройти проверку.
./letsencrypt-auto certonly --webroot -w /home/user/www/domane.ru/  -d domain.ru

Дело в том, что nginx используется как прокси к node.js приложению:

server {
    listen 80;
    listen [::]:80;

    server_name domane.ru;

 location  / {

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:4567/;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

    }


Пробовал добавлять такие вещи в конфиг:
root /home/user/www/domane.ru;

location ~ /.well-known/acme-challenge/(.*)
    {
            default_type "text/plain";
            root /home/user/www/domane.ru;
    }

Ничего не помогает. Node.js-приложение отдаёт 404.

Т.е. Let’s Encrypt, создаёт в /home/user/www/domane.ru/ директорию /.well-known, куда складывает файл для прохождения проверки. Но этот файл не отдаётся.
  • Вопрос задан
  • 1919 просмотров
Решения вопроса 1
pomeo
@pomeo
Я делаю так
/dir/letsencrypt/letsencrypt-auto certonly --renew-by-default --webroot -w /home/ubuntu/.lets -d domain.com

это можно в cron сразу засунуть. Только если у вас много доменов, имейте ввиду, что у них есть лимиты. И лимиты достаточно маленькие.
letsencrypt.conf 
location /.well-known/acme-challenge {
    root /home/ubuntu/.lets;
}

/etc/nginx/sites-enabled/domain.com 
server {
        listen 80;
        server_name domain.com;
        include letsencrypt.conf;
        include redirect.conf;
}

Тут сразу редирект на 443
redirect.conf 
if ($host ~* ^www\.(.*)$) {
	return 301 https://$1$request_uri;
}
return 301 https://$host$request_uri;

Т.е. у меня глобальная папка /home/ubuntu/.lets для всех доменов, он там создаёт файл, проверяет его наличие и удаляет. Поэтому смысла создавать отдельную папку для каждого домена не вижу.
Node.js тут не участвует никак, вот конфиг с нодой, в который тоже подключена проверка lets encrypt
server {
        listen 443 ssl http2;
        server_name domain.com;

        ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;

        include sslplus.conf;

        location / {
                include nodejs.conf;
                proxy_pass http://10.3.100.1:3000/;
        }
        include letsencrypt.conf;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы