Update file 07-proxy-ssl.md
This commit is contained in:
parent
cff73ea427
commit
b48dc0f7a0
@ -1,59 +1,23 @@
|
|||||||
# 07. Проксирование и SSL (Nginx Proxy Manager)
|
# 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.
|
```nginx
|
||||||
|
|
||||||
## Проксируемые домены
|
|
||||||
|
|
||||||
| Домен | Назначение | Бэкенд | 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" следует добавить:
|
|
||||||
```
|
|
||||||
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
|
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
|
||||||
add_header X-Content-Type-Options nosniff always;
|
add_header X-Content-Type-Options nosniff always;
|
||||||
add_header X-Frame-Options SAMEORIGIN always;
|
add_header X-Frame-Options SAMEORIGIN always;
|
||||||
add_header Referrer-Policy "strict-origin-when-cross-origin" 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, предотвращая атаки понижения протокола. |
|
| **Strict-Transport-Security (HSTS)** | Заставляет браузер всегда использовать HTTPS, предотвращая атаки понижения протокола. |
|
||||||
@ -62,6 +26,53 @@ add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
|
|||||||
| **Referrer-Policy** | Контролирует, какая информация о referer передаётся при переходе на другие сайты. |
|
| **Referrer-Policy** | Контролирует, какая информация о referer передаётся при переходе на другие сайты. |
|
||||||
| **Permissions-Policy** | Отключает ненужные API (геолокация, камера, микрофон) для всех страниц. |
|
| **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
|
||||||
|
|
||||||
- Логи NPM собираются **Promtail** (на gateway) и отправляются в **Loki**.
|
- Логи NPM собираются **Promtail** (на gateway) и отправляются в **Loki**.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user