Проксирование в Docker
Проксирование направляет запрос
на имя сервиса приложения
и его порт.
Nginx принимает соединение
на 80
внутри копии,
а директива proxy_pass
передаёт его
на http://app:8000
во внутренней сети Compose.
Страница приложения
лежит в app/index.html
и содержит hello:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>page</title>
</head>
<body>
hello
</body>
</html>
Блок server
слушает 80
и проксирует корень
на приложение.
Содержимое default.conf:
server {
listen 80;
location / {
proxy_pass http://app:8000;
}
}
Сервис web
на nginx:1.30
монтирует конфиг
и публикует
8080:80.
Сервис app
без ports
отдаёт каталог app
через http.server.
Файл compose.yaml:
services:
web:
image: nginx:1.30
ports:
- "8080:80"
volumes:
- "$PWD/default.conf:/etc/nginx/conf.d/default.conf"
app:
image: python:3.14
volumes:
- "$PWD/app:/app"
working_dir: /app
command: ["python", "-m", "http.server", "8000", "--bind", "0.0.0.0"]
После подъёма в фоне
откроем localhost:8080
и увидим текст
из приложения,
хотя его порт
на компьютер не выведен.
Запуск проекта:
docker compose up -d
Соберите пару land и app с проксированием корня на 8000 и ответом land на порту 8091 компьютера.
Откройте опубликованный адрес в браузере и сравните текст с файлом в каталоге приложения.