Nginx Proxy Manager — текущая конфигурация
Сервер: 192.168.10.3 (ASUS)
Контейнер npm-temp (jc21/nginx-proxy-manager:latest), порты: 80, 81 (admin), 443.
Все Proxy Hosts
| # | Домен | → Backend | Порт | SSL | Описание |
|---|---|---|---|---|---|
| 1 | home.petera9a.id.lv | 192.168.20.100 | 8123 | ✅ Let’s Encrypt | Home Assistant |
| 3 | wiki.petera9a.id.lv | 192.168.10.3 | 8030 | ✅ Let’s Encrypt | Wiki |
| 4 | vault.petera9a.id.lv | 192.168.10.3 | 8083 | ✅ Let’s Encrypt | Vaultwarden |
| 6 | uptime.jc.id.lv | 192.168.10.3 | 3001 | ✅ Let’s Encrypt | Uptime Kuma |
| 8 | photos.petera9a.id.lv | 192.168.10.3 | 2283 | ✅ Let’s Encrypt | Immich |
| 9 | photos.jc.id.lv | 192.168.10.3 | 2283 | ✅ Let’s Encrypt | Immich (alias) |
| 11 | sync.jc.id.lv | 192.168.10.3 | 8020 | ✅ Let’s Encrypt | ⚠️ dicechess-analytics API |
| 16 | dc.jc.id.lv | 192.168.10.9 | 8000 | ✅ Let’s Encrypt | Dice Chess Trainer |
| 17 | docs.petera9a.id.lv | 192.168.10.4 | 8000 | ✅ Let’s Encrypt | Documentation |
| 18 | dca.jc.id.lv | 192.168.10.3 | 8030 | ✅ Let’s Encrypt | dicechess-analytics UI |
Ключевые находки
IMPORTANT
sync.jc.id.lv(конфиг #11) уже проксирует весь трафик на analytics API (192.168.10.3:8020). Сейчас все endpoint’ы (GET games, GET players, POST games, Swagger) доступны публично через этот домен.
NOTE
dca.jc.id.lv(конфиг #18) — это UI (порт 8030), всё корректно.
Рекомендация: ограничить sync.jc.id.lv только POST /api/games
В Nginx Proxy Manager есть поле “Custom Nginx Configuration” (Advanced tab) для каждого proxy host.
Для хоста sync.jc.id.lv (#11) можно добавить custom location блоки, которые:
- Разрешат только
POST /api/games - Заблокируют всё остальное
Вариант A: через Custom Nginx Configuration в NPM UI
В NPM UI → Proxy Host sync.jc.id.lv → Advanced → Custom Nginx Configuration:
# Блокируем всё по умолчанию
location / {
return 403;
}
# Разрешаем только POST на /api/games
location = /api/games {
limit_except POST {
deny all;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://192.168.10.3:8020;
}Вариант B: создать новый выделенный proxy host
Вместо использования sync.jc.id.lv для полного API, создать новый домен, например
ingest.jc.id.lv, настроенный только на приём POST.
Вариант C: оставить sync для внутренних нужд, выставить наружу только dca
sync.jc.id.lv— убрать из DNS / закрыть фаерволом (оставить только для LAN)dca.jc.id.lv— UI, он уже смотрит на порт 8030, безопасен- Создать
ingest.jc.id.lv— только для POST /api/games с ограничениями
TIP
Самый безопасный вариант — C: чётко разделяет роли доменов. Observer и облачные агенты используют
ingest.jc.id.lvс Bearer token. Внутренний API (sync.jc.id.lv) остаётся доступен только из LAN.