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