# NGINX

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

<header class="article__header" data-v-9d66386d="" id="bkmrk-nginx-%E2%80%93-%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9-%D0%BF%D1%80%D0%BE"># Nginx – обратный прокси для Docker контейнеров

</header><article class="article__content text" data-v-9d66386d="" id="bkmrk-nginx-%E2%80%93-%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9-%D0%BF%D1%80%D0%BE-2"><figure class="m_column" data-anchor="Azx2" data-node-id="1"><a name="Azx2"></a><div class="wrap"><noscript>![](https://img4.teletype.in/files/ba/c0/bac06197-32f2-4031-82c3-5c7b11bcb2c9.png)</noscript>![](https://img4.teletype.in/files/ba/c0/bac06197-32f2-4031-82c3-5c7b11bcb2c9.png)</div><figcaption> Nginx – обратный прокси для Docker контейнеров</figcaption></figure><section data-node-id="3"><nav class="contents" data-node-id="4">- [Введение](https://books.uaky.ru/@dobriydenis/nginx-proxy-for-docker#MHPO)
- [Установка Nginx](https://books.uaky.ru/@dobriydenis/nginx-proxy-for-docker#e3uX)
- [Пример обратного прокси для Docker контейнера](https://books.uaky.ru/@dobriydenis/nginx-proxy-for-docker#RqsI)
- [Выпуск SSL сертификата с помощью Certbot](https://books.uaky.ru/@dobriydenis/nginx-proxy-for-docker#foJi)
- [Вывод](https://books.uaky.ru/@dobriydenis/nginx-proxy-for-docker#cL99)

</nav></section>## <a name="MHPO"></a>Введение

<a name="4SIF"></a>В данной небольшой заметке разберем на примере, как с помощью Nginx сделать обратный прокси для ваших Docker контейнеров, Nginx будем использовать без Docker, разберем как настроить Nginx и как получить SSL сертификат для нашего сервиса бесплатно, с помощью Certbot и Lets Encrypt

<a name="Z940"></a>Так же, ни кто не запрещает пользоваться такой вещью как [Nginx Proxy Manager](https://nginxproxymanager.com/), [Traefik](https://github.com/traefik/traefik) и другими способами для получения результата.

<a name="N7FE"></a>В данной заметке разберем это на примере, у нас есть контейнер с [Memos](https://lsetc.ru/ustanovka-self-hosted-servisa-dlja-zametok-memos-so-vstroennym-chat-gpt-v-docker/) в Docker, работает на **5230 порту**, мы хотим что бы он у нас открывался по нашему доменному имени memos.site.ru и использовал https соединение, а не по ip адресу с портом  
Мы не хотим пробрасывать кучу портов на роутере, если мы находимся за natом, а открыть только 80 и 443 порты.

---

## <a name="e3uX"></a>Установка Nginx

<a name="d5bl"></a>

<a name="RqKc"></a>Если Nginx у вас еще не установлен, то установка на Debian/Ubuntu производится данной командой:

```
apt install nginx
```

<a name="a34C"></a>

<a name="REY6"></a>Проверим статус Nginx:

```
systemctl status nginx
```

<figure class="m_column" data-anchor="g8m2" data-node-id="26"><a name="g8m2"></a><div class="wrap"><noscript>![](https://lsetc.ru/wp-content/uploads/2023/11/2023-11-01-12_46_32-vdsina-outline.jpg)</noscript>![](https://lsetc.ru/wp-content/uploads/2023/11/2023-11-01-12_46_32-vdsina-outline.jpg)</div><figcaption> systemctl status nginx</figcaption></figure><a name="Nnmo"></a>Если все хорошо, продолжаем разбираться дальше, добавим конфиг в Nginx для нашего сервиса

---

## <a name="RqsI"></a>Пример обратного прокси для Docker контейнера

<a name="W2YT"></a>

<a name="KhoZ"></a>Создаем конфиг, в данном случае для [Memos](https://lsetc.ru/ustanovka-self-hosted-servisa-dlja-zametok-memos-so-vstroennym-chat-gpt-v-docker/): (далее по примеру замените **site.ru** на свое доменное имя):

```
nano /etc/nginx/sites-available/memos.site.ru
```

<a name="6J3J"></a>

<a name="jMki"></a>Добавляем туда содержимое ниже, вам нужно заменить директиву **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;
    }
}
```

<a name="0eNT"></a>

```
ln -s /etc/nginx/sites-available/memos.site.ru /etc/nginx/sites-enabled/
```

<a name="3Oof"></a>

<a name="MWyg"></a>Перезагружаем Nginx и проверяем в браузере доступность по доменному имени **http**://memos.site.ru:

```
systemctl restart nginx
```

<a name="VbRv"></a>

<a name="qXRp"></a>Если все открывается, идем далее и получаем SSL сертификат

---

## <a name="foJi"></a>Выпуск SSL сертификата с помощью Certbot

<a name="rcTp"></a>

<a name="KIqo"></a>Установим Certbot для выпуска SSL сертификата на наше доменное имя:

```
apt install certbot python3-certbot-nginx
```

<a name="wJEx"></a>

<a name="RiCu"></a>И выпустим сам SSL сертификат данной командой (замените данные на свои):

```
certbot --non-interactive -m admin@site.ru --agree-tos --no-eff-email --nginx -d memos.site.ru
```

<a name="5K3M"></a>

```
systemctl restart nginx
```

<a name="tUpG"></a>

<a name="jjiw"></a>Если все прошло успешно, то Certbot сам добавит редирект с 80 на 443 порт и данные по сертификату в конфиг который мы создали до этого **/etc/nginx/sites-available/memos.site.ru**, заходим в браузер и проверяем теперь **https**://memos.site.ru

</article>