Содержание

Установка на Debian Linux nginx и certbot

Теория

После того как был установлен 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

А в браузере его работоспособность, перейдя по адресу виртуальной машины.

Проверка в браузере

Теперь нужно настроить 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

Проверка работоспособности nikkutuzov.ru без ssl

Все отлично получилось. Теперь добавим сертификат 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

Проверка таймера обновления ssl

Можно проверить перевыпуск сертификатов «сухим прогоном». Ничего не поломаем, это просто проверка, что сертификаты перевыпустятся автоматически в заданное время:

sudo certbot renew --dry-run

Certbot - сухой прогон

Итак, с сертификатами у нас все отлично. Теперь нужно, чтобы открывался наш сайт, а не просто страничка-заглушка от 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

Правим hosts

Проверяю, что задуманное получилось:

ping nikkutuzov.ru

Ping

После внесения изменений в конфигурационный файл nginx службу нужно перезапустить:

sudo systemctl restart nginx.service

Теперь наш сайт имеет сертификат, ему уже больше доверия. Давайте проверим насколько он соответствует современным стандартам безопасности. Для этого нужно перейти по ссылке и ввести адрес сайта. Результат отличный!

Проверяем наш сайт на соответствие стандартам безопасности соединения

— Николай Кутузов 2025/09/27 20:44