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

В данной небольшой заметке разберем на примере, как с помощью 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 контейнеров

Если все хорошо, продолжаем разбираться дальше, добавим конфиг в 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 сертификат для него.

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!