Найти в Дзене
Sovenok IT hard soft ware

Начало знакомства с Docker (Часть 4 nginx)

В предыдущем уроке мы узнали, как организовать балансировку сайтов на базе nginx, который работает в Docker-контейнере. Для того чтобы запустить процесс балансировки, нам нужно было внести изменения в конфигурацию nginx и перезапустить контейнер. Теперь давайте рассмотрим ситуацию, когда nginx работает не в контейнере, а балансирует не сами сайты, а доступ к их контейнерам. Если на вашем компьютере ещё не установлен nginx, то установим его. (чтобы проверить , команда nginx -v) sudo apt update sudo apt install nginx Далее наш путь /etc/nginx/sites-available/dockersite , создаем файл для nginx nano /etc/nginx/sites-available/dockersite и прописываем туда upstream dockersite {
server 127.0.0.1:5001; # Контейнер site1
server 127.0.0.1:5002; # Контейнер site2
}
server {
listen 80;
server_name dockersite.local;
location / {
proxy_pass http://dockersite;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_hea
Оглавление

В предыдущем уроке мы узнали, как организовать балансировку сайтов на базе nginx, который работает в Docker-контейнере. Для того чтобы запустить процесс балансировки, нам нужно было внести изменения в конфигурацию nginx и перезапустить контейнер.

Теперь давайте рассмотрим ситуацию, когда nginx работает не в контейнере, а балансирует не сами сайты, а доступ к их контейнерам.

Начало

Если на вашем компьютере ещё не установлен nginx, то установим его. (чтобы проверить , команда nginx -v)

sudo apt update

sudo apt install nginx

Далее наш путь /etc/nginx/sites-available/dockersite , создаем файл для nginx nano /etc/nginx/sites-available/dockersite и прописываем туда

upstream dockersite {
server 127.0.0.1:5001; # Контейнер site1
server 127.0.0.1:5002; # Контейнер site2
}

server {
listen 80;
server_name dockersite.local;

location / {
proxy_pass http://dockersite;
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;
}
}

Делаем символическую ссылку sudo ln -s /etc/nginx/sites-available/dockersite /etc/nginx/sites-enabled/

Проверим работу Nginx с помощью команды sudo nginx -t и перезапустим его. Для этого используем команду systemctl restart nginx, которая выполняет полную перезагрузку, останавливая все связанные службы и запуская весь пакет.

Если в конфигурации не обнаружено серьёзных ошибок или не было внесено, что то существенное, то можно перезапустить Nginx с помощью команды nginx -s reload. Эта команда не остановит текущие соединения и сессии.

Настройка docker-compose

Теперь необходимо внести изменения в файл docker-compose.yml, чтобы контейнеры были доступны через порты на хосте.

Добавляем поле с портами

container_name: site1

ports:

-"5001:80" # Порт 5001 на хосте → порт 80 в контейнере

Тоже самое и для второго сайта с портом 5002

-2

Переходим в директорию, где хранится наш файл docker-compose, и перезагружаем его с помощью команды docker-compose restart. Теперь проверим через portainer, запустились ли все контейнеры.

Включение выключение контейнеров

Открываем файл конфигурации с помощью команды sudo nano /etc/nginx/sites-available/dockersite и комментируем строки с сайтами, добавив перед ними знак «#». Например #server 127.0.0.1:5002; # Контейнер site2

После этого проверяем и перезапускаем nginx, используя следующие команды:

sudo nginx -t

sudo nginx -s reload

Так как в конфигурации не произошло существенных изменений, нет необходимости в полном перезапуске nginx. В данный момент наш сайт работает нормально, но все запросы направляются в контейнер с портом 5001.

Если вы не хотите полностью отключать контейнер, а лишь хотите настроить балансировку нагрузки, например, направить основные запросы на один сайт, а все остальные — на другой, то можно использовать веса nginx. Для этого необходимо ввести команду:

nginx -s server 127.0.0.1:5001 weight=2

Вы можете увеличить вес, например, 1 (для второго сайта) и 5 (для первого сайта).

Контейнер с сайтом 2 не доступен, если раскомментировать то будет работать как 1 к 5
Контейнер с сайтом 2 не доступен, если раскомментировать то будет работать как 1 к 5

Предыдущие уроки

Часть 1

Часть 2

Часть 3

Мой канал