IT
November 1, 2023

Nginx – обратный прокси для Docker контейнеров

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

Проверим статус Nginx:

systemctl status 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 или посетить мой сайт, спасибо за потраченное время на чтение и доброго времени суток!)