После того, как в настройках плагина Webroot прописана папка, в которой будут храниться необходимые для проверки прав Certbot'ом на домен файлы для получения и обновления SSL-сертификатов Let's Encrypt (для перевода работы сайтов по протоколу HTTPs), нужно настроить веб-сервер NGiNX и поддерживаемые им виртуальные хосты для передачи этих файлов по запросу под всеми доменами, для которых требуется работа по HTTPs. Как это сделать и будет рассмотрено ниже в этой статье.
Для чего производится настройка NGiNX и его виртуальных хостов
Итак, у нас в настройках letsencrypt в конфиге /etc/letsencrypt/cli.ini
прописано, что аутентификация проходит с помощью плагина Webroot (строка authenticator = webroot
) и то, что все нужные для аутентификации файлы нужно искать в указанной папке (строка webroot-path = /var/www/html
).
Исходя из этих данных, Certbot при необходимости аутентификации будет искать нужные ему файлы в папке /var/www/html/.well-known/acme-challenge/
, запрашивая её содержимое по доменному имени, на который создаётся или продлевается сертификат по адресу: http://www.example.com/.well-known/acme-challenge/authentication.php
. Файл будет конечно не authentication.html
, а тот, что создаст Certbot, но папка будет именно эта.
Наша задача: делать так, чтобы одна папка на сервере (/var/www/html/.well-known/acme-challenge/
) была доступна для выдачи документов со всех доменов (виртуальных хостов NGiNX). Именно этим и займёмся.
Для контроля, как всё работаем, создадим этот файл authentication.html
в этой папке примерно такого содержания:
Ответ из папки <pre>/var/www/html/.well-known/acme-challenge/</pre> получен!
Настройка NGiNX и его виртуальных хостов для получения SSL-сертификатов Let's Encrypt
Для того, чтобы любой виртуальный хост NGiNX мог при запросе к папке /.well-known
отдавать документы из папки /var/www/html
на сервере (а не искать её в своей локальной папке хоста), нужно ко всем виртуальным хостам добавить запись об этом:
location /.well-known {
root /var/www/html;
}
Так хостов на сервере не один и не два, создадим файл letsencrypt
с этой записью, поместим его в папку настроек NGiNX /etc/nginx
и будем вызывать при необходимости в конфигах виртуальных хостов:
include /etc/nginx/letsencrypt;
Итак, чтобы быстро создать требуемый файл, достаточно ввести команду:
# echo -e "location /.well-known {\n\troot /var/www/html;\n}" > /etc/nginx/letsencrypt
После этого нужно добавить запись include /etc/nginx/letsencrypt;
во всех блоках server
перед всеми блоками location
, (если они есть) в конфигах виртуальных хостов, которым нужен SSL-сертификат.
Смена пользователя папки /.well-known
для успешной работы letsencrypt
Если все работы ведутся не под тем пользователем, под которым будет производиться автоматическая аутентификация letsencrypt, (а это так), то нужно назначить правильные права доступа к этой папке. Для этого нужно вспомнить (или узнать) под каким пользователем работает NGiNX на сервере. Для этого нужно посмотреть строку в конфиге NGiNX /etc/nginx/nginx.conf
. Обычно она первая в конфиге и выглядит так:
user www-data;
Обычно пользователь www-data
входит в группу www-data
, но для того, чтобы узнать это наверняка, можно выполнить команду:
# groups www-data
Осталось поменять права доступа на папку /var/www/html/.well-known
и всё, что в неё вложено:
# chown -hR www-data:www-data /var/www/html/.well-known
После этого нужно перезагрузить NGiNX:
# systemctl restart nginx
Теперь по запросу с любого домена (при обращении к любому виртуальному хосту) вида: http://site.ru/.well-known/acme-challenge/authentication.html
, где были внесены описанные выше вставки include /etc/nginx/letsencrypt;
, должен открываться наш файл authentication.php
. Это значит, всё настроено правильно и можно удалить наш тестовый файл (чтобы не болтался на сервере и не мешал работе certbot).
Резюме
Таким образом мы настроили работу NGiNX и его виртуальных хостов для получения SSL-сертификатов Let's Encrypt, открыв папку /var/www/html/.well-known/acme-challenge/
для ответов с любого домена, так что Certbot сможет записать на диск сервера то, что ему нужно, а затем прочитать в ответе сервера на запрос по доменному имени.
Можно приступать непосредственно к получению SSL-сертификатов Let's Encrypt.
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)