====== Установка на Debian Linux nginx и certbot ======
===== Теория =====
После того как был [[sw:lin:apache2_dokuwiki|установлен apache2 и DokuWiki]] можно было бы на той ВМ установить сертификаты ''Let's Encrypt'' и пробросить в роутере на нее порты ''80'' и ''443''. Сайт работал бы замечательно. Но в планах у меня еще несколько вещиц. Нужно и почтовый сервер настроить [[sw:lin:mail|(уже настроил)]] с web-интерфейсом ([[wp>ru:Roundcube|roundcube]], например) и еще что-нибудь (например, [[sw:lin:synapse-matrix|Matrix Synapse]]) придумаю.
Поэтому я решил поставить на отдельную виртуальную машину ''nginx''. С нее я буду управлять всеми сертификатами, которые мне понадобятся и буду проксировать запросы на нужную виртуальную машину.
Приступим к установке.
===== Практика =====
Создаем виртуальную машину аналогично той, которую мы создавали в этой [[sw:win:s16:hyper_v|статье]]. Задаем имя, поколение и количество оперативной памяти. Первое и последнее можно позже изменить. Поколение изменить уже не получится. Я выбрал соответственно имя ''nginx'', ''Поколение 1'' и размер оперативной памяти ''1 гигабайт''.
{{:sw:lin:deb:nginx_certbot:1_hyper-v_vm_name.jpg?600|Имя ВМ}}
{{:sw:lin:deb:nginx_certbot:2_hyper-v_vm_generation.jpg?600|Поколение ВМ}}
{{:sw:lin:deb:nginx_certbot:3_hyper-v_vm_ram.jpg?600|Оперативная память}}
Затем выбираю виртуальный коммутатор для связи с Интернет.
{{:sw:lin:deb:nginx_certbot:4_hyper-v_vm_virtualswitch.jpg?600|Виртуальный коммутатор}}
Затем создаю жесткий диск размером ''10 гигабайтов''. Позже это значение можно увеличить, **но нельзя уменьшить**! Указываю ISO-образ, с которого будет загрузка установщика ''Linux''.
{{:sw:lin:deb:nginx_certbot:5_hyper-v_vm_hdd.jpg?600|Жесткий диск}}
{{:sw:lin:deb:nginx_certbot:6_hyper-v_vm_instalationmedia.jpg?600|Установочный образ}}
{{:sw:lin:deb:nginx_certbot:7_hyper-v_vm_summary.jpg?600|Информация}}
Во время установки все оставляю как в [[sw:lin:install_os|этой статье]], изменяю только имя хоста, а домен тоже (как в той статье) оставляю пустым. Позже эти значения можно при необходимости изменить.
{{:sw:lin:deb:nginx_certbot:8_hostname.jpg?600|Имя хоста}}
{{:sw:lin:deb:nginx_certbot:9_domain_empty.jpg?600|Домен}}
После завершения установки ''Debian Linux'' проверяю обновления системы и обновляю при наличии таковых:
sudo apt update && sudo apt upgrade -y
Затем устанавливаю ''nginx'':
sudo apt install nginx -y
Проверяю статус службы ''nginx'':
sudo systemctl status nginx.service
{{:sw:lin:deb:nginx_certbot:10_nginx_status.jpg?600|Проверка работоспособности nginx}}
А в браузере его работоспособность, перейдя по адресу виртуальной машины.
{{:sw:lin:deb:nginx_certbot:11_nginxstartwindow.png?600|Проверка в браузере}}
Теперь нужно настроить ''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''
{{:sw:lin:deb:nginx_certbot:12_nikkutuzov_80.png?600|Проверка работоспособности nikkutuzov.ru без ssl}}
Все отлично получилось. Теперь добавим сертификат [[wp>ru:Let’s_Encrypt|Let's Encrypt]]
Для этого нужно установить ''certbot'':
sudo apt install python3-certbot-nginx -y
После успешной установки запускаем процедуру получения сертификата с автоматической настройкой ''nginx'' (ключ ''- -nginx''):
sudo certbot --nginx
''Certbot'' сам определил (взял значения из ранее созданного конфигурационного файла) для каких сайтов нужно запросить сертификат(ы). Нужно лишь ответить на несколько вопросов:
* адрес электронной почты (можно пропустить, оставив поле пустым);
* принимаю или не принимаю условия использования;
* желаю ли получать различные сообщения и новости на электронную почту;
* для каких сайтов активировать HTTPS - пустое поле означает выбор для всех в списке.
В конце мы видим сообщение об успешном получении сертификата.
{{:sw:lin:deb:nginx_certbot:13_createcerts.jpg?600|Создание сертификата}}
Проверяем в браузере, что все работает по ''HTTPS''
{{:sw:lin:deb:nginx_certbot:14_nikkutuzovssl.png?600|Проверка сайта с сертификатом}}
Сертификаты выдаются не навсегда, а на 3 месяца, точнее на 90 дней. Что же теперь, придется следить за этим и перевыпускать сертификаты вручную? Нет! для этого есть специальная служба. Она ставится вместе с ''certbot''. Проверим, что она у нас запущена и работает:
sudo systemctl status certbot.time
{{:sw:lin:deb:nginx_certbot:15_certbot_timer.jpg?600|Проверка таймера обновления ssl}}
Можно проверить перевыпуск сертификатов "сухим прогоном". Ничего не поломаем, это **просто проверка**, что сертификаты перевыпустятся автоматически в заданное время:
sudo certbot renew --dry-run
{{:sw:lin:deb:nginx_certbot:16_dry-run.jpg?600|Certbot - сухой прогон}}
Итак, с сертификатами у нас все отлично. Теперь нужно, чтобы открывался наш сайт, а не просто страничка-заглушка от ''nginx''. Для этого поправим немного наш конфигурационный файл:
sudo nano /etc/nginx/sites-available/nikkutuzov.ru
Нужно в конце секции ''Server{}'', там, где указан порт ''443'' вставить три строки.
location / {
proxy_pass http://nikkutuzov.ru;
}
{{:sw:lin:deb:nginx_certbot:17_proxy_pass.jpg?600|Проксируем}}
:!: вместо ''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
{{:sw:lin:deb:nginx_certbot:18_hosts.jpg?600|Правим hosts}}
Проверяю, что задуманное получилось:
ping nikkutuzov.ru
{{:sw:lin:deb:nginx_certbot:19_ping.jpg?600|Ping}}
После внесения изменений в конфигурационный файл ''nginx'' службу нужно перезапустить:
sudo systemctl restart nginx.service
Теперь наш сайт имеет сертификат, ему уже больше доверия. Давайте проверим насколько он соответствует современным стандартам безопасности. Для этого нужно перейти по [[https://www.ssllabs.com/ssltest/analyze.html|ссылке]] и ввести адрес сайта. Результат отличный!
{{:sw:lin:deb:nginx_certbot:20_test.png?600|Проверяем наш сайт на соответствие стандартам безопасности соединения}}
--- //[[nikkutuzov@nikkutuzov.ru|Николай Кутузов]] 2025/09/27 20:44//