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