L o a d i n g
Как запустить несколько доменов на одном IP, привязав их к разным Docker-контейнерам Фильмы

Когда на сервере есть только один IP-адрес, но нужно обслуживать несколько доменов, направленных на разные приложения (контейнеры Docker), на помощь приходит reverse proxy. Это мощный инструмент, который позволяет перенаправлять запросы на соответствующие контейнеры в зависимости от домена. Рассмотрим, как это сделать с использованием NGINX или Traefik.

Задача

У вас есть сервер с IP-адресом, например, 192.168.0.1, и два домена:

  • example1.com — привязан к приложению в контейнере app1.
  • example2.com — привязан к приложению в контейнере app2.

Каждое приложение должно быть доступно через соответствующий домен.

Решение

1. Настройка DNS

Убедитесь, что оба домена настроены в DNS с A-записью, указывающей на ваш сервер:

Домен Тип Значение
example1.com A 192.168.0.1
example2.com A 192.168.0.1

2. Настройка Docker-контейнеров

Создайте Docker Compose файл для каждого приложения:

App1 (docker-compose-app1.yml):

version: '3.9'services:  app1:    image: your-app1-image    container_name: app1    ports:      - "8001:80"

App2 (docker-compose-app2.yml):

version: '3.9'services:  app2:    image: your-app2-image    container_name: app2    ports:      - "8002:80"

Запустите оба контейнера:

docker-compose -f docker-compose-app1.yml up -ddocker-compose -f docker-compose-app2.yml up -d

Проверьте доступность:

  • http://192.168.0.1:8001 — приложение app1.
  • http://192.168.0.1:8002 — приложение app2.

3. Настройка Reverse Proxy с NGINX

Установка NGINX

sudo apt updatesudo apt install nginx

Конфигурация NGINX

Создайте конфигурацию для каждого домена:

Файл /etc/nginx/sites-available/example1.com:
server {    server_name example1.com;        location / {        proxy_pass http://127.0.0.1:8001;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }}
Файл /etc/nginx/sites-available/example2.com:
server {    server_name example2.com;        location / {        proxy_pass http://127.0.0.1:8002;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }}

Активация конфигураций

sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/sudo systemctl restart nginx

Теперь:

  • example1.com отправляет запросы на контейнер app1.
  • example2.com отправляет запросы на контейнер app2.

4. Альтернатива: Используем Traefik

Если вы хотите минимизировать ручную настройку, используйте Traefik. Это современный reverse proxy с автоматическим обнаружением сервисов.

Пример настройки контейнера с Traefik:

labels:  - "traefik.enable=true"  - "traefik.http.routers.app1.rule=Host(`example1.com`)"  - "traefik.http.services.app1.loadbalancer.server.port=80"

Итог

Теперь у вас есть универсальная схема, как держать несколько доменов на одном IP, направляя их запросы на разные приложения в контейнерах.

NGINX подойдет для статичных приложений. Traefik удобен для часто обновляемых проектов. Выбирайте то, что подходит вашему проекту! 🚀

Написать комментарий

Вы можете оставить комментарий автору статьи Обязательные поля помечены *