Nginx Proxy Manager — текущая конфигурация

Сервер: 192.168.10.3 (ASUS)

Контейнер npm-temp (jc21/nginx-proxy-manager:latest), порты: 80, 81 (admin), 443.

Все Proxy Hosts

#Домен→ BackendПортSSLОписание
1home.petera9a.id.lv192.168.20.1008123✅ Let’s EncryptHome Assistant
3wiki.petera9a.id.lv192.168.10.38030✅ Let’s EncryptWiki
4vault.petera9a.id.lv192.168.10.38083✅ Let’s EncryptVaultwarden
6uptime.jc.id.lv192.168.10.33001✅ Let’s EncryptUptime Kuma
8photos.petera9a.id.lv192.168.10.32283✅ Let’s EncryptImmich
9photos.jc.id.lv192.168.10.32283✅ Let’s EncryptImmich (alias)
11sync.jc.id.lv192.168.10.38020✅ Let’s Encrypt⚠️ dicechess-analytics API
16dc.jc.id.lv192.168.10.98000✅ Let’s EncryptDice Chess Trainer
17docs.petera9a.id.lv192.168.10.48000✅ Let’s EncryptDocumentation
18dca.jc.id.lv192.168.10.38030✅ Let’s Encryptdicechess-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 блоки, которые:

  1. Разрешат только POST /api/games
  2. Заблокируют всё остальное

Вариант 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.