🎯 Введение
Если вы устали запоминать порты типа 8006, 8443, 8080 и 9443 — эта статья для вас. Nginx Proxy Manager (NPM) превратит вашу коллекцию веб-интерфейсов в аккуратный список красивых доменных имён с автоматическим SSL.
Что вы получите после настройки:
- Все сервисы по доменным именам: pve.domain.com, cloud.domain.com, nas.domain.com
- Автоматическое обновление SSL сертификатов Let’s Encrypt
- Единая точка входа с возможностью добавления SSO (Authelia/Authentik)
- Защита от распространённых атак “из коробки”
- Простой и понятный веб-интерфейс для управления
⚙️ Установка Nginx Proxy Manager
Рекомендуем использовать Docker-версию — она проще в обновлении и управлении.
version: ‘3.8’
services:
app:
image: ‘jc21/nginx-proxy-manager:latest’
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
– ’80:80′ # HTTP трафик
– ’81:81′ # Админка NPM
– ‘443:443’ # HTTPS трафик
volumes:
– ./data:/data
– ./letsencrypt:/etc/letsencrypt
networks:
– proxy-networknetworks:
proxy-network:
driver: bridge
Первые шаги:
- Создайте папку для NPM:
mkdir nginx-proxy-manager && cd nginx-proxy-manager - Создайте файл
docker-compose.ymlс содержимым выше - Запустите:
docker-compose up -d - Откройте браузер:
http://ваш-сервер:81 - Логин по умолчанию:
admin@example.com/changeme
⚠️ Важно!
Сразу после первого входа смените пароль администратора. Если ваш сервер доступен из интернета, ограничьте доступ к порту 81 только с доверенных IP-адресов.
Proxmox VE (порт 8006)
⚡ Особенности:
- Использует порт 8006 (HTTPS)
- Требует WebSocket для консоли виртуальных машин
- Самоподписанный сертификат по умолчанию
- Специфичные заголовки для авторизации
Настройка в NPM:
- Добавляем новый Proxy Host
- Domain Names:
pve.yourdomain.com - Scheme:
https - Forward Hostname/IP: IP вашего Proxmox сервера
- Forward Port:
8006 - Включаем: WebSocket Support, Block Common Exploits
- SSL: Let’s Encrypt
Кастомная конфигурация Nginx (Advanced tab):
proxy_ssl_verify off;# Критические заголовки для Proxmox
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
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_set_header X-Forwarded-Port 443;# Таймауты для консоли виртуальных машин
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;# Отключаем буферизацию для консоли
proxy_buffering off;
# Размер загружаемых файлов (для ISO и т.д.)
client_max_body_size 50G;
✅ Проверка:
После сохранения откройте https://pve.yourdomain.com. Должна появиться страница входа Proxmox. Зайдите и проверьте, что консоли виртуальных машин работают корректно.
Zimbra Collaboration
Zimbra имеет два основных интерфейса: веб-клиент (порт 8443) и админка (порт 7071).
# 7071 – Админка Zimbra (zmi)
# 8443 – Веб-клиент (HTTPS)
# 8080 – Веб-клиент (HTTP, редирект)
# 7073 – Почтовый прокси
Для веб-клиента (пользователи):
- Domain Names:
mail.yourdomain.com - Scheme:
https - Forward Hostname/IP: IP Zimbra сервера
- Forward Port:
8443 - Включаем: Block Common Exploits
Кастомная конфигурация:
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_set_header X-Forwarded-Port 443;# Для корректной работы загрузки файлов
client_max_body_size 1024M;# Zimbra любит долгие соединения
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;# Отключаем компрессию для некоторых запросов
proxy_set_header Accept-Encoding “”;
Для админки Zimbra:
Создайте отдельный Proxy Host для zimbra-admin.yourdomain.com на порт 7071.
MailCow Dockerized
📌 Важно для MailCow:
- MailCow слушает на 127.0.0.1:80/443 внутри контейнера
- Нужно пробросить порты наружу или использовать Docker сеть
- Требует корректные заголовки X-Forwarded-*
Способ 1: Через Docker сеть (рекомендуется)
docker network create proxy-network# 2. Подключаем NPM к этой сети
# В docker-compose.yml NPM добавляем:
networks:
default:
name: proxy-network# 3. Подключаем MailCow к этой же сети
# В docker-compose.yml MailCow:
networks:
default:
name: proxy-network
# И убираем ВСЕ ports секции из MailCow
Теперь в NPM указываем:
- Forward Hostname/IP:
nginx-mailcow(имя контейнера nginx в MailCow) - Forward Port:
80 - Scheme:
http
Кастомная конфигурация для MailCow:
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_set_header X-Forwarded-Host $host;# Для WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;# Отключаем буферизацию для реального времени
proxy_buffering off;
Proxmox Backup Server (порт 8007)
PBS очень похож на Proxmox VE, но имеет свои особенности для работы с большими бэкапами.
# Domain Names: pbs.yourdomain.com
# Scheme: https
# Forward Hostname/IP: IP PBS сервера
# Forward Port: 8007
# WebSocket Support: ВКЛ
# Block Common Exploits: ВКЛ
Кастомная конфигурация:
proxy_ssl_verify off;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_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;# PBS требует эти заголовки для API
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-Host $host;# Для больших бэкапов
client_max_body_size 0; # Без ограничений
proxy_read_timeout 86400s; # 24 часа для больших задач
proxy_send_timeout 86400s;
# Отключаем компрессию для бинарных данных
proxy_set_header Accept-Encoding “”;
Pi-hole (порт 80)
🎯 Особенности:
- Работает на HTTP (порт 80)
- Требует WebSocket для live-статистики
- Простая настройка, но важно location /ws
Настройка в NPM:
- Domain Names:
pihole.yourdomain.com - Scheme:
http - Forward Hostname/IP: IP сервера с Pi-hole
- Forward Port:
80 - WebSocket Support: Обязательно ВКЛ
- Block Common Exploits: ВКЛ
- SSL: Let’s Encrypt
Кастомная конфигурация:
location / {
proxy_pass http://pihole:80;
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;
}# Отдельно для WebSocket
location /ws {
proxy_pass http://pihole:80;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $host;
}# Кэширование статики
location /admin/img/ {
expires 30d;
add_header Cache-Control “public, immutable”;
}# Заголовки безопасности
add_header X-Frame-Options “SAMEORIGIN” always;
add_header X-Content-Type-Options “nosniff” always;
add_header X-XSS-Protection “1; mode=block” always;
Nextcloud (порт 80/443 в Docker)
📌 Особенности Nextcloud:
- Множество под-путей: /.well-known/, /remote.php/, /ocs/
- WebDAV на стандартных портах
- WebSocket для реальных уведомлений и Talk
- Строгие требования к заголовкам
- Большие файлы требуют корректной настройки лимитов
Настройка в NPM для Docker-версии:
- Domain Names:
cloud.yourdomain.com - Scheme:
http(SSL терминация на NPM) - Forward Hostname/IP:
nextcloud-app(имя контейнера) - Forward Port:
80 - Включаем: WebSocket Support, Block Common Exploits
- SSL: Let’s Encrypt
Кастомная конфигурация Nginx (обязательно!):
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_set_header X-Forwarded-Host $host;# Критически важные заголовки для Nextcloud
proxy_set_header X-Forwarded-Port 443;
add_header Referrer-Policy “no-referrer” always;
add_header X-Content-Type-Options “nosniff” always;
add_header X-Download-Options “noopen” always;
add_header X-Frame-Options “SAMEORIGIN” always;
add_header X-Permitted-Cross-Domain-Policies “none” always;
add_header X-Robots-Tag “none” always;
add_header X-XSS-Protection “1; mode=block” always;# Для больших файлов
client_max_body_size 10G;
proxy_request_buffering off;# Долгие таймауты
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
# WebSocket для Nextcloud Talk
location /push/ {
proxy_pass http://nextcloud-app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “Upgrade”;
}
# WebDAV отдельно
location /remote.php/dav/ {
proxy_pass http://nextcloud-app;
client_max_body_size 10G;
proxy_read_timeout 3600s;
}
Настройка в Nextcloud config.php:
‘overwriteprotocol’ => ‘https’,
‘overwritehost’ => ‘cloud.yourdomain.com’,
‘overwritewebroot’ => ‘/’,
‘trusted_proxies’ => [‘192.168.1.10’], // IP вашего NPM
‘forwarded_for_headers’ => [‘HTTP_X_FORWARDED_FOR’],
‘upload_max_filesize’ => ’10G’,
‘post_max_size’ => ’10G’,
OpenMediaVault (порт 80)
⚙️ Особенности OMV:
- Работает на стандартном порту 80 (HTTP)
- Использует Basic Auth и сессии
- WebSocket для уведомлений в реальном времени
- Может конфликтовать с другими веб-серверами на том же хосте
Настройка в NPM:
- Domain Names:
nas.yourdomain.com - Scheme:
http - Forward Hostname/IP: IP вашего сервера OMV
- Forward Port:
80(или 8080 если изменён) - Включаем: WebSocket Support, Block Common Exploits
- SSL: Let’s Encrypt
Кастомная конфигурация Nginx:
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;# OMV требует точный Host заголовок
proxy_set_header Host $http_host;# WebSocket для уведомлений OMV
location /ws {
proxy_pass http://omv-server:80;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;# Таймауты для долгих подключений
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
# Защитные заголовки
add_header X-Frame-Options “SAMEORIGIN” always;
add_header X-Content-Type-Options “nosniff” always;
add_header X-XSS-Protection “1; mode=block” always;
⚠️ Конфликт портов:
Если на сервере уже работает nginx/apache, OMV может не запуститься на порту 80. Используйте порт 8080:
OMV_WEBGUI_PORT=”8080″
# Затем перезапустить:
sudo systemctl restart nginx
sudo systemctl restart php-fpm
📊 Сравнительная таблица настроек
| Сервис | Домен | Порт | WebSocket | Особые настройки | Проверка |
|---|---|---|---|---|---|
| Proxmox VE | pve.* | 8006 | Да | proxy_ssl_verify off | Консоль VM работает |
| Zimbra | mail.* | 8443 | Нет | client_max_body_size 1G | Вложение 100MB+ |
| MailCow | mail.* | 80 (cont) | Да | X-Forwarded-Host | Почта отправляется |
| Proxmox Backup | pbs.* | 8007 | Да | client_max_body_size 0 | Бэкап запускается |
| Pi-hole | pihole.* | 80 | Да | location /ws | Live stats работают |
| Nextcloud | cloud.* | 80 (cont) | Да (/push/) | client_max_body_size 10G, trusted_proxies | Talk, WebDAV |
| OpenMediaVault | nas.* | 80 или 8080 | Да (/ws) | proxy_set_header Host $http_host | Уведомления real-time |
🚀 Продвинутые настройки
А. Единый вход (SSO) с Authelia
location / {
# Прокси в Authelia для проверки аутентификации
set $upstream_authelia http://authelia:9091/api/verify;# Проверяем аутентификацию
auth_request $upstream_authelia;
auth_request_set $user $upstream_http_remote_user;
proxy_set_header Remote-User $user;# Если не аутентифицирован — редирект в Authelia
error_page 401 =302 https://auth.yourdomain.com;# Прокси к целевому сервису
proxy_pass http://целевой-сервис:порт;
}
Б. Гео-блокировка и ограничение доступа
allow 192.168.1.0/24;
allow 10.0.0.0/8;
deny all;# Basic Auth как дополнительная защита
auth_basic “Admin Area”;
auth_basic_user_file /etc/nginx/.htpasswd;
В. Docker Compose для всей инфраструктуры
networks:
proxy-net:
name: proxy-network
driver: bridgeservices:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
ports: [“80:80”, “443:443”, “81:81”]
volumes: [“./npm/data:/data”, “./npm/letsencrypt:/etc/letsencrypt”]
networks: [proxy-net]nextcloud:
image: nextcloud:latest
container_name: nextcloud-app
volumes: [“./nextcloud/html:/var/www/html”, “./nextcloud/data:/var/www/html/data”]
networks: [proxy-net]pihole:
image: pihole/pihole:latest
container_name: pihole
environment: [TZ=Europe/Moscow, WEBPASSWORD=ваш_пароль]
networks: [proxy-net]
dns: [127.0.0.1, 8.8.8.8]
🔧 Решение типичных проблем
# Решение: Добавить правильные proxy_set_header
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port 443;# 2. Не работают консоли в Proxmox
# Решение: Проверить WebSocket, увеличить таймауты
proxy_read_timeout 3600s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;# 3. Ошибка 413 Request Entity Too Large
# Решение:
client_max_body_size 1024M; # или 0 для безлимита# 4. Nextcloud показывает “Доступ запрещён”
# Решение: Настроить trusted_proxies в config.php
‘trusted_proxies’ => [‘nginx-proxy-manager’],
‘overwriteprotocol’ => ‘https’,
# 5. OMV не отображает реальные IP пользователей
# Решение:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Диагностические команды:
docker exec nginx-proxy-manager nginx -t# Посмотреть логи
docker logs –tail 50 nginx-proxy-manager# Проверить SSL сертификаты
openssl s_client -connect mail.yourdomain.com:443 -servername mail.yourdomain.com# Проверить WebSocket
curl -i -H “Connection: Upgrade” -H “Upgrade: websocket” \
-H “Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==” \
-H “Sec-WebSocket-Version: 13” \
https://pve.yourdomain.com
🏁 Итог
✅ Итоговый чеклист
- Все сервисы доступны по своим доменным именам
- SSL сертификаты действительны и не истекли
- WebSocket соединения работают (консоли, live-статистика)
- Загрузка больших файлов работает в Nextcloud и Zimbra
- Нет ошибок CSRF в формах
- Реальные IP пользователей отображаются в логах
- Бэкап конфигурации NPM настроен
Итоговый результат: Вместо запоминания портов и IP-адресов вы получаете аккуратный список: https://pve.domain.com, https://cloud.domain.com, https://nas.domain.com. Все с валидными SSL-сертификатами, защищённые и удобные.
🎯 Ключевые преимущества Nginx Proxy Manager:
- Простота: Веб-интерфейс вместо правки конфигов вручную
- Автоматизация: Let’s Encrypt SSL без скриптов
- Безопасность: Встроенная защита от распространённых атак
- Гибкость: Кастомные настройки nginx для особых случаев
- Мониторинг: Доступ к логам и статистике
Nginx Proxy Manager делает рутинную работу за вас, позволяя сосредоточиться на настройке и использовании сервисов, а не на инфраструктуре доступа к ним.