На главную
- Инструкции для UNIX-систем
- Обзор
- Подключение к серверу по SSH
- Подключение к серверу по SFTP
- Авторизация по SSH-ключу
- Смена или сброс пароля root
- Смена пароля root для MySQL
- Добавление пользователей
- Управление правами доступа
- Защита SSH от подбора пароля. Fail2ban
- Подключение к базе данных MySQL
- Создание дампа базы и восстановление данных
- Установка LAMP на Ubuntu
- Установка phpMyAdmin на Ubuntu с LAMP
- Установка SSL-сертификата на Nginx
- Установка модулей PHP (CentOS)
- Установка модулей PHP (Debian / Ubuntu)
- Настройка параметров PHP (CentOS)
- Настройка параметров PHP (Debian / Ubuntu)
- Настройка перенаправлений
- Настройка перенаправлений (Nginx)
- Настройка FTP в Ubuntu 20.04
- Оптимизация MySQL с помощью MySQLTuner
- Сканирование с помощью ClamAV
- Управление службами в systemd
- Логирование в systemd
- Аудит системных событий
- Добавление дополнительного IP
- Настройка статического IP
- Добавление и удаление диска
- Изменение размера диска
- Монтирование резервных копий
- Создание swap, изменение его размера
- Установка и удаление программ. Менеджеры пакетов
- Установка графической оболочки XFCE на Ubuntu
- Настройка iptables
- Настройка OpenVPN
- Установка произвольной ОС на сервер
- Удаленный доступ к MySQL
- Установка QEMU-агента
- Установка Zabbix-агента
- Установка и работа с PostgreSQL
- Установка почтового сервера iRedMail
- Установка SSL на сервер с Keitaro
- Установка Minecraft на CentOS 7
- Запуск Wordpress на сервере c Ubuntu
- Запуск бота в фоновом режиме
- Установка сертификатов Минцифры
- Подготовка образа для создания облачного сервера
- Диагностика и решение проблем
- Инструкции для Windows
- Панели управления
Установка SSL-сертификата на Nginx
В статье рассмотрим, как получить и установить бесплатный SSL Let's Encrypt для Nginx в Ubuntu. Установку и настройку Nginx на Ubuntu мы описывали в отдельной статье.
Шаг 1. Установка Certbot
Чтобы получить сертификат, воспользуемся Certbot. Установим его на сервер:
sudo apt install certbot python3-certbot-nginx
Шаг 2. Настройка конфигурации Nginx
Certbot будет обращаться к определенному виртуальному хосту, ориентируясь на директиву server_name — в ней должен быть указан домен вашего сайта.
Мы писали о настройке виртуальных хостов Nginx здесь. Если настройка была выполнена по нашей инструкции, у вас будет создан виртуальный хост /etc/nginx/sites-available/имя_сайта
(в нашем примере — /etc/nginx/sites-available/testsite.dev
).
Проверим, открыв файл в редакторе:
sudo nano /etc/nginx/sites-available/testsite.dev
Найдем в нем директиву server_name
и убедимся, что в ней указан наш домен:
...
server_name testsite.dev www.testsite.dev;
...
Если необходимо, внесите правки в файл и сохраните изменения.
После проверьте конфигурацию Nginx на наличие ошибок:
sudo nginx -t
Если все в порядке, перезагрузите веб-сервер:
sudo systemctl reload nginx
Шаг 3. Настройка брандмауэра
Далее нам нужно разрешить трафик HTTPS.
Проверим, какие параметры ufw
установлены сейчас:
sudo ufw status
Если разрешен только HTTP-трафик, вывод будет примерно следующим:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Внесем изменения, а именно разрешим HTTPS-трафик. Для этого выполним:
sudo ufw allow 'Nginx Full'
Профиль Nginx Full разрешает оба типа трафика: и HTTPS, на порту 443, и HTTP, на порту 80.
Разрешать отдельно HTTP-трафик нам больше не требуется, поэтому удалим ненужную директиву:
sudo ufw delete allow 'Nginx HTTP'
Снова проверим настройки брандмауэра:
sudo ufw status
Если все в порядке, вы увидите, что весь трафик (Nginx Full) разрешен:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Шаг 4. Получение SSL
Запустим Certbot с плагином Nginx, чтобы обновить конфигурацию Nginx:
sudo certbot --nginx -d testsite.dev -d www.testsite.dev
При первом запуске будет запрошен ваш контактный email, также потребуется принять условия лицензионного соглашения.
Далее выберите, каким образом нужно настроить HTTPS:
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
После того, как все будет сделано, система сообщит, что процедура завершена, и укажет, где размещены сертификаты:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/testsite.dev/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/testsite.dev/privkey.pem
Your cert will expire on 2022-12-27. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Теперь вы можете перейти по своему домену, используя протокол HTTPS.
Шаг 5. Автоматическое обновление SSL
Сертификаты Let’s Encrypt действуют 90 дней, поэтому их нужно своевременно обновлять. Это, конечно, можно делать вручную — с помощью команды:
certbot renew
Но также можно настроить автоматическое обновление, создав соответствующую cron-задачу:
crontab -e
Укажем в ней следующие параметры:
30 3 * * 2 /usr/bin/certbot renew >> /var/log/renew-ssl.log
Таким образом, certbot будет каждый вторник в 03:30 ночи автоматически проверять сертификаты и продлевать те, до истечения которых осталось меньше 30 дней. Результат будет записываться в файл renew-ssl.log.