Nginx – обратный прокси для Docker контейнеров
Введение
В данной небольшой заметке разберем на примере, как с помощью Nginx сделать обратный прокси для ваших Docker контейнеров, Nginx будем использовать без Docker, разберем как настроить Nginx и как получить 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
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 [email protected] --agree-tos --no-eff-email --nginx -d memos.site.ru
systemctl restart nginx
Если все прошло успешно, то Certbot сам добавит редирект с 80 на 443 порт и данные по сертификату в конфиг который мы создали до этого /etc/nginx/sites-available/memos.site.ru, заходим в браузер и проверяем теперь https://memos.site.ru
Вывод
В данной заметке разобрали как можно проксировать ваши локальные сервисы с помощью Nginx на ваше доменное и выпустили бесплатный SSL сертификат для него.
Что бы не потерять инструкцию рекомендую подписаться на мой личный блог-канал в Telegram в котором я делюсь в формате заметок своими знаниями и интересным из мира IT или посетить мой сайт, спасибо за потраченное время на чтение и доброго времени суток!)