В данной небольшой заметке разберем на примере, как с помощью Nginx сделать обратный прокси для ваших Docker контейнеров, Nginx будем использовать без Docker, разберем как его настроить и получить SSL сертификат для нашего сервиса бесплатно, с помощью Certbot и Lets Encrypt.
Так же, ни кто не запрещает пользоваться такой вещью как Nginx Proxy Manager, Traefik и другими способами для получения результата.
В данной заметке разберем это на примере, у нас есть контейнер с Memos в Docker, работает на 5230 порту, мы хотим что бы он у нас открывался по нашему доменному имени memos.site.ru и использовал https соединение, а не по ip адресу с портом
Мы не хотим пробрасывать кучу портов на роутере, если мы находимся за natом, а открыть только 80 и 443 порты.
Установка Nginx
Если Nginx у вас еще не установлен, то установка на Debian/Ubuntu производится данной командой:
apt install nginx
Проверим статус Nginx:
systemctl status nginx

Если все хорошо, продолжаем разбираться дальше, добавим конфиг в Nginx для нашего сервиса
Пример обратного прокси для Docker контейнера
Создаем конфиг, в данном случае для Memos: (далее по примеру замените site.ru на свое доменное имя):
nano /etc/nginx/sites-available/memos.site.ru
Добавляем туда содержимое ниже, вам нужно заменить директиву server_name memos.site.ru; на свое доменное имя, а в proxy_pass http://localhost:5230; указать свой порт сервиса:
server { listen 80; server_name memos.site.ru; location / { proxy_pass http://localhost:5230; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }}
ln -s /etc/nginx/sites-available/memos.site.ru /etc/nginx/sites-enabled/
Перезагружаем Nginx и проверяем в браузере доступность по доменному имени http://memos.site.ru:
systemctl restart nginx
Если все открывается, идем далее и получаем SSL сертификат
Выпуск SSL сертификата с помощью Certbot
Установим Certbot для выпуска SSL сертификата на наше доменное имя:
apt install certbot python3-certbot-nginx
И выпустим сам SSL сертификат данной командой (замените данные на свои):
certbot —non-interactive -m admin@site.ru —agree-tos —no-eff-email —nginx -d memos.site.rusystemctl restart nginx
Если все прошло успешно, то Certbot сам добавит редирект с 80 на 443 порт и данные по сертификату в конфиг который мы создали до этого /etc/nginx/sites-available/memos.site.ru, заходим в браузер и проверяем теперь https://memos.site.ru
Вывод
В данной заметке разобрали как можно проксировать ваши локальные сервисы с помощью Nginx на ваше доменное и выпустили бесплатный SSL сертификат для него.