Update file 07-proxy-ssl.md

This commit is contained in:
Administrator 2026-03-20 16:24:08 +05:00
parent cff73ea427
commit b48dc0f7a0

View File

@ -1,59 +1,23 @@
# 07. Проксирование и SSL (Nginx Proxy Manager)
Nginx Proxy Manager (NPM) работает на хосте `gateway` (192.168.1.201) в Docker-контейнере. Он является единой точкой входа для всех внешних HTTPS-запросов к доменам `*.zailon.ru`.
## Обзор
## Конфигурация NPM
**Nginx Proxy Manager (NPM)** запущен в Docker-контейнере на хосте `gateway` (192.168.1.201). Он принимает входящие HTTP/HTTPS-запросы на порты 80 и 443 и проксирует их к внутренним сервисам. SSL-сертификаты автоматически выпускаются и обновляются через Let's Encrypt.
- **Версия**: jc21/nginx-proxy-manager:latest (образ)
- **Порты**: 80 (HTTP), 443 (HTTPS), 81 (админка)
- **Хранилище данных**: `/opt/npm/data`, `/opt/npm/letsencrypt`
## Заголовки безопасности
## Доступ к админке NPM
Для защиты веб-сервисов рекомендуется добавлять следующие HTTP-заголовки для каждого проксируемого домена (настройка в интерфейсе NPM → Advanced):
Административный интерфейс доступен по адресу `https://192.168.1.201:81` (только локально). Учётные данные хранятся в зашифрованном виде во встроенной базе данных SQLite.
## Проксируемые домены
| Домен | Назначение | Бэкенд | SSL (Let's Encrypt) |
|-----------------------|-----------------------|--------------------------|---------------------|
| ab.zailon.ru | Audiobookshelf | http://192.168.1.203:45132 | ✅ |
| book.zailon.ru | BookStack | http://192.168.1.202:45133 | ✅ |
| bw.zailon.ru | Bitwarden | http://192.168.1.202:45131 | ✅ |
| chat.zailon.ru | Snikket (XMPP) | https://192.168.1.206:8443 | ✅ |
| cloud.zailon.ru | Nextcloud | http://192.168.1.213:45131 | ✅ |
| cook.zailon.ru | Mealie | http://192.168.1.202:45132 | ✅ |
| git.zailon.ru | GitLab | http://192.168.1.209:45130 | ✅ |
| jellyfin.zailon.ru | Jellyfin | http://192.168.1.203:45131 | ✅ |
| mnemozailon.ru | BookStack (альт) | http://192.168.1.202:45133 | ✅ |
| mon.zailon.ru | Grafana | http://192.168.1.208:45132 | ✅ |
| music.zailon.ru | Ampache | http://192.168.1.203:45132 | ✅ |
| nc.zailon.ru | Nextcloud (ВМ) | https://192.168.1.205:443 | ✅ |
| olimp.zailon.ru | Heimdall | http://192.168.1.201:45131 | ✅ |
| oracul.zailon.ru | MeshCentral | http://192.168.1.208:45131 | ✅ |
| photo.zailon.ru | Immich | http://192.168.1.204:45131 | ✅ |
| qb.zailon.ru | qBittorrent | http://192.168.1.211:8080 | ✅ (Offline) |
## SSL-сертификаты
Все сертификаты выдаются Let's Encrypt через NPM автоматически. Для каждого домена настроен:
- **Провайдер**: Let's Encrypt
- **Срок действия**: 90 дней, автоматическое продление
- **Тип**: Single domain (все домены отдельные)
## Настройки безопасности
### Рекомендуемые заголовки для каждого прокси
В интерфейсе NPM для каждого прокси на вкладке "Advanced" следует добавить:
```
```nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Content-Type-Options nosniff always;
add_header X-Frame-Options SAMEORIGIN always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
add_header Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=()" always;
```
### Назначение заголовков
| Заголовок | Назначение |
|-----------|------------|
| **Strict-Transport-Security (HSTS)** | Заставляет браузер всегда использовать HTTPS, предотвращая атаки понижения протокола. |
@ -62,6 +26,53 @@ add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
| **Referrer-Policy** | Контролирует, какая информация о referer передаётся при переходе на другие сайты. |
| **Permissions-Policy** | Отключает ненужные API (геолокация, камера, микрофон) для всех страниц. |
## Глобальная конфигурация NPM
Глобальные настройки находятся в `/etc/nginx/nginx.conf` внутри контейнера. Основные параметры:
```nginx
client_max_body_size 2000m; # максимальный размер загружаемого файла (2 ГБ)
proxy_read_timeout 90s; # таймаут чтения прокси
set_real_ip_from 10.0.0.0/8; # доверенные подсети для определения реального IP
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Real-IP;
real_ip_recursive on;
```
- **client_max_body_size 2000m** позволяет загружать большие файлы (например, видео в Jellyfin).
- **proxy_read_timeout 90s** защищает от зависания долгих запросов.
- **set_real_ip_from** определяет реальный IP клиента, что важно для корректной работы логирования и ограничений.
## Доступ к админке NPM
Административный интерфейс доступен по адресу `https://192.168.1.201:81` (только локально). Учётные данные хранятся в зашифрованном виде во встроенной базе данных SQLite.
## Проксируемые домены
Список всех активных прокси (актуально на 20 марта 2026):
| Домен | Бэкенд | SSL | Статус |
|-------|--------|-----|--------|
| ab.zailon.ru | http://192.168.1.203:45132 | Let's Encrypt | Online |
| book.zailon.ru | http://192.168.1.202:45133 | Let's Encrypt | Online |
| bw.zailon.ru | http://192.168.1.202:45131 | Let's Encrypt | Online |
| chat.zailon.ru | https://192.168.1.206:8443 | Let's Encrypt | Online |
| cloud.zailon.ru | http://192.168.1.213:45131 | Let's Encrypt | Online |
| cook.zailon.ru | http://192.168.1.202:45132 | Let's Encrypt | Online |
| git.zailon.ru | http://192.168.1.209:45130 | Let's Encrypt | Online |
| jellyfin.zailon.ru | http://192.168.1.203:45131 | Let's Encrypt | Online |
| mnemozailon.ru | http://192.168.1.202:45133 | Let's Encrypt | Online |
| mon.zailon.ru | http://192.168.1.208:45132 | Let's Encrypt | Online |
| music.zailon.ru | http://192.168.1.203:45132 | Let's Encrypt | Online |
| nc.zailon.ru | https://192.168.1.205:443 | Let's Encrypt | Online |
| olimp.zailon.ru | http://192.168.1.201:45131 | Let's Encrypt | Online |
| oracul.zailon.ru | http://192.168.1.208:45131 | Let's Encrypt | Online |
| photo.zailon.ru | http://192.168.1.204:45131 | Let's Encrypt | Online |
| qb.zailon.ru | http://192.168.1.211:8080 | Let's Encrypt | **Offline** |
> **Проблема:** `qb.zailon.ru` отображается как Offline. Необходимо проверить доступность qBittorrent на порту 8080 и корректность прокси-правила.
## Мониторинг NPM
- Логи NPM собираются **Promtail** (на gateway) и отправляются в **Loki**.