Налаштування Nginx + Let's Encrypt зворотного проксі перед Yucca
Вступ
У цій інструкції я опишу, як налаштувати Nginx і випустити Let's Encrypt SSL сертифікат, який автоматично продовжуватиметься. Nginx виступатиме як простий Web сервер перед Yucca для термінації SSL сесії та редиректу з 80 на 443 порт. Навіщо взагалі встановлювати Nginx, адже Yucca й сама може термінувати SSL і навіть флаги для цього є? Це правда, але коли ви зайнятий 443 порт, він буде недоступний для іншого ПЗ, доведеться використовувати якийсь інший, а також не буде редиректу з HTTP на HTTPS – якщо вас це влаштовує, можете сміливо пропустити секцію зі встановленням і налаштуванням Nginx Крок 1 і одразу перейти до Кроку 2. Усі дії я виконуватиму на Ubuntu Server 22.04, але все те саме буде працювати і на SUSE, CentOS, Fedora, Debian тощо. Хіба що пакетний менеджер у всіх буде свій, але я сподіваюся ви відрізните apt від zypper 🙂
Крок 0. Підготовка
Отже нам знадобиться:
- Хост з білою IP адресою
- Домен або піддомен, який дивиться на цю адресу
- Встановлена Yucca
В інструкції я буду використовувати домен foobar.yuccastream.com, ваш домен буде відрізнятися.
nslookup foobar.yuccastream.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: foobar.yuccastream.com
Address: 128.140.2.103
Отже у мене є Yucca, доступна за адресою http://foobar.yuccastream.com:9910
Крок 1. Встановлення і налаштування Nginx
Встановлюємо nginx:
sudo apt install nginx
Перевіряємо http://foobar.yuccastream.com
Далі створюємо конфігураційний файл для Yucca:
sudo nano /etc/nginx/conf.d/yucca.conf
Домен foobar.yuccastream.com вам потрібно замінити на свій
upstream yucca_upstream {
server 127.0.0.1:9910 fail_timeout=0;
}
server {
listen 80;
server_name foobar.yuccastream.com;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://yucca_upstream;
}
}
Збережіть файл і перевірте коректність конфігурації:
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Якщо все коректно, ви побачите syntax is ok Оновлюємо конфігурацію nginx:
nginx -s reload
Оновлюємо сторінку і бачимо вже веб інтерфейс Yucca http://foobar.yuccastream.com
Крок 2. Встановлення Certbot і випуск letsencrypt сертифіката
Встановлюємо пакети:
sudo apt install certbot python3-certbot-nginx
Випускаємо сертифікат для нашого домену:
Домен foobar.yuccastream.com вам потрібно замінити на свій
sudo certbot --nginx -d foobar.yuccastream.com
Сertbot попросить ввести E-mail (1), рекомендую ввести вашу реальну поштову скриньку, у разі якщо сертифікат спливатиме і не продовжиться автоматично, Let's Encrypt надішле вам про це повідомлення. Також потрібно буде погодитися з умовами і правилами (2), (3). Далі certbot сам знайде потрібний конфігураційний файл з потрібним доменом, налаштує секцію з SSL і редирект, на виході покаже вам посилання.
Можете подивитися, що в підсумку вийшло у файлі /etc/nginx/conf.d/yucca.conf
upstream yucca_upstream {
server 127.0.0.1:9910 fail_timeout=0;
}
server {
server_name foobar.yuccastream.com;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://yucca_upstream;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/foobar.yuccastream.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/foobar.yuccastream.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = foobar.yuccastream.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name foobar.yuccastream.com;
return 404; # managed by Certbot
}
Рекомендую перевірити, що certbot створив таймер для продовження сертифіката, він повинен бути активний:
sudo systemctl status certbot.timer
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Fri 2023-09-22 11:54:02 UTC; 7min ago
Trigger: Fri 2023-09-22 14:13:25 UTC; 2h 11min left
Triggers: ● certbot.service
Sep 22 11:54:02 foobar systemd[1]: Started Run certbot twice daily.
Оновлюємо сторінку http://foobar.yuccastream.com і бачимо, що все вже працює через HTTPS, редирект теж працює.
Крок 3. Налаштування безпеки
Ми налаштували доступ по HTTPS через nginx, але Yucca досі доступна по HTTP за адресою http://foobar.yuccastream.com:9910. Це пов'язано ось з цим налаштуванням за замовчуванням:
listen_address = ":9910"
Йдемо в конфігураційний файл Yucca і правимо цей параметр:
sudo nano /opt/yucca/yucca.toml
Робимо так, щоб Yucca слухала лише localhost:
listen_address = "127.0.0.1:9910"
І перезавантажуємо сервер Yucca:
sudo systemctl restart yucca
Перевіряємо, тепер за адресою http://foobar.yuccastream.com:9910 нічого немає, а тут https://foobar.yuccastream.com все працює.




