Префикс пути в Docker
Префикс пути отдаёт один адрес
приложению,
а остальной сайт
остаётся статическим.
Запрос к корню
читает файл
из /usr/share/nginx/html,
а путь с папкой /api/
уходит на app:8000
через proxy_pass
с обрезкой префикса.
Главная страница
в site/index.html
содержит hello:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>page</title>
</head>
<body>
hello
</body>
</html>
Ответ приложения
лежит в app/index.html
и содержит слово api:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>page</title>
</head>
<body>
api
</body>
</html>
Блок location
для /api/
заканчивается слэшем
в proxy_pass,
чтобы приложение
видело корень.
Содержимое default.conf:
server {
listen 80;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location /api/ {
proxy_pass http://app:8000/;
}
}
Сервис web
монтирует конфиг,
каталог site
и пару портов
8080
и 80.
Сервис app
без ports
слушает 8000.
Файл compose.yaml:
services:
web:
image: nginx:1.30
ports:
- "8080:80"
volumes:
- "$PWD/site:/usr/share/nginx/html"
- "$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
и localhost:8080/api/
и сравним два текста.
Запуск проекта:
docker compose up -d
Настройте сервис land с префиксом /data/, статикой hello в корне и ответом data из приложения на порту 8092 компьютера.
Откройте корень и адрес с папкой data и зафиксируйте, какой текст виден в каждом случае.