После того как был установлен apache2 и DokuWiki можно было бы на той ВМ установить сертификаты Let's Encrypt и пробросить в роутере на нее порты 80 и 443. Сайт работал бы замечательно. Но в планах у меня еще несколько вещиц. Нужно и почтовый сервер настроить (уже настроил) с web-интерфейсом (roundcube, например) и еще что-нибудь (например, Matrix Synapse) придумаю.
Поэтому я решил поставить на отдельную виртуальную машину nginx. С нее я буду управлять всеми сертификатами, которые мне понадобятся и буду проксировать запросы на нужную виртуальную машину.
Приступим к установке.
Создаем виртуальную машину аналогично той, которую мы создавали в этой статье. Задаем имя, поколение и количество оперативной памяти. Первое и последнее можно позже изменить. Поколение изменить уже не получится. Я выбрал соответственно имя nginx, Поколение 1 и размер оперативной памяти 1 гигабайт.
Затем выбираю виртуальный коммутатор для связи с Интернет.
Затем создаю жесткий диск размером 10 гигабайтов. Позже это значение можно увеличить, но нельзя уменьшить! Указываю ISO-образ, с которого будет загрузка установщика Linux.
Во время установки все оставляю как в этой статье, изменяю только имя хоста, а домен тоже (как в той статье) оставляю пустым. Позже эти значения можно при необходимости изменить.
После завершения установки Debian Linux проверяю обновления системы и обновляю при наличии таковых:
sudo apt update && sudo apt upgrade -y
Затем устанавливаю nginx:
sudo apt install nginx -y
Проверяю статус службы nginx:
sudo systemctl status nginx.service
А в браузере его работоспособность, перейдя по адресу виртуальной машины.
Теперь нужно настроить nginx так, чтобы запрос сайта nikkutuzov.ru прошел через него, а nginx перенаправил этот запрос на виртуальную машину с DokuWiki. Прежде всего нужно в настройках роутера пробросить порты 80 и 443 на эту (nginx) виртуальную машину (ip-адрес у нее в моем случае 192.168.11.12). Затем нужно создать конфигурационный файл этого сайта.
sudo nano /etc/nginx/sites-available/nikkutuzov.ru
Со следующим содержанием:
server {
listen 80;
listen [::]:80;
server_name nikkutuzov.ru www.nikkutuzov.ru;
}
Потом нужно создать ссылку на этот файл:
sudo ln -s /etc/nginx/sites-available/nikkutuzov.ru /etc/nginx/sites-enabled/
И перезапустить nginx:
sudo systemctl restart nginx.service
Попробуем перейти по http://nikkutuzov.ru
Все отлично получилось. Теперь добавим сертификат Let's Encrypt
Для этого нужно установить certbot:
sudo apt install python3-certbot-nginx -y
После успешной установки запускаем процедуру получения сертификата с автоматической настройкой nginx (ключ - -nginx):
sudo certbot --nginx
Certbot сам определил (взял значения из ранее созданного конфигурационного файла) для каких сайтов нужно запросить сертификат(ы). Нужно лишь ответить на несколько вопросов:
В конце мы видим сообщение об успешном получении сертификата.
Проверяем в браузере, что все работает по HTTPS
Сертификаты выдаются не навсегда, а на 3 месяца, точнее на 90 дней. Что же теперь, придется следить за этим и перевыпускать сертификаты вручную? Нет! для этого есть специальная служба. Она ставится вместе с certbot. Проверим, что она у нас запущена и работает:
sudo systemctl status certbot.time
Можно проверить перевыпуск сертификатов «сухим прогоном». Ничего не поломаем, это просто проверка, что сертификаты перевыпустятся автоматически в заданное время:
sudo certbot renew --dry-run
Итак, с сертификатами у нас все отлично. Теперь нужно, чтобы открывался наш сайт, а не просто страничка-заглушка от nginx. Для этого поправим немного наш конфигурационный файл:
sudo nano /etc/nginx/sites-available/nikkutuzov.ru
Нужно в конце секции Server{}, там, где указан порт 443 вставить три строки.
location / {
proxy_pass http://nikkutuzov.ru;
}
вместо
nikkutuzov.ru можно указать просто ip-адрес виртуальной машины (192.168.11.13 в моем случае), но я выбрал так по маленькой причине, о которой расскажу, когда буду настраивать регистрацию на этом сайте.
Теперь мне нужно, чтобы по имени nikkutuzov.ru моя виртуальная машина (ТОЛЬКО ОНА!) переходила на 192.168.11.13 Для открою файл hosts:
sudo nano /etc/hosts
и добавлю следующую строку:
192.168.11.13 nikkutuzov.ru wiki
Проверяю, что задуманное получилось:
ping nikkutuzov.ru
После внесения изменений в конфигурационный файл nginx службу нужно перезапустить:
sudo systemctl restart nginx.service
Теперь наш сайт имеет сертификат, ему уже больше доверия. Давайте проверим насколько он соответствует современным стандартам безопасности. Для этого нужно перейти по ссылке и ввести адрес сайта. Результат отличный!
— Николай Кутузов 2025/09/27 20:44