Настройка NGiNX и его виртуальных хостов для передачи данных Certbot

После того, как в настройках плагина 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.

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню