Как в docker-compose настроить перенаправление http-запрос из одного контейнера в другой через nginx?

Для настройки перенаправления HTTP-запросов из одного контейнера в другой через Nginx в Docker Compose, вам понадобится создать три контейнера: один контейнер с Nginx и два контейнера с вашими сервисами.

Вот шаги, которые вы должны выполнить:

Шаг 1: Создайте Dockerfile для вашего сервиса и соберите образ для каждого сервиса. Для примера, допустим, у вас есть два сервиса - service1 и service2.

# Dockerfile для service1
FROM nginx:latest
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Dockerfile для service2
FROM nginx:latest
COPY nginx.conf /etc/nginx/conf.d/default.conf

Шаг 2: Создайте файл docker-compose.yml для определения сервисов и их связей. Здесь мы определим три сервиса - nginx, service1 и service2.

version: '3'

services:
  nginx:
    build:
      context: .
    ports:
      - 80:80

  service1:
    build:
      dockerfile: Dockerfile
      context: ./service1
    ports:
      - 8080:80

  service2:
    build:
      dockerfile: Dockerfile
      context: ./service2
    ports:
      - 8081:80

Шаг 3: Создайте файл nginx.conf, где вы настроите перенаправление HTTP-запросов внутри контейнера Nginx на другие сервисы.

# nginx.conf
server {
  listen 80;
  
  location / {
    proxy_pass http://service1:80;
  }
  
  location /service2/ {
    proxy_pass http://service2:80/;
  }
}

Шаг 4: Запустите контейнеры с помощью docker-compose.

$ docker-compose up -d

После этого контейнеры с nginx, service1 и service2 будут созданы и запущены. Входящие HTTP-запросы на порт 80 будут перенаправлены на контейнеры service1 и service2 в соответствии с настройками nginx.conf.

Вы можете проверить, что настройка работает, выполнив HTTP-запросы к серверу, установив curl или веб-браузер. Например, для сервиса service1:

$ curl http://localhost

Должен быть получен ответ от сервиса service1.

Вот так вы можете настроить перенаправление HTTP-запроса из одного контейнера в другой через Nginx с использованием Docker Compose.