Remove the "Лог файл" (Log file) column from the report generation as it's no longer needed. This simplifies the report structure and removes unused functionality.
226 lines
36 KiB
Plaintext
226 lines
36 KiB
Plaintext
Инструкция предоставляет базовую конфигурацию для удобного управления проксированием серверов с помощью Angie. Angie — современный веб-сервер, созданный бывшими разработчиками nginx с открытым исходным кодом (лицензия BSD). Он сочетает проверенную архитектуру nginx с новыми возможностями: ✅ Поддержка HTTP/3 (клиент ↔ сервер независимо) ✅ Встроенный Docker-модуль для автоматического управления сервисами ✅ ACME-клиент — автоматическое получение TLS-сертификатов ✅ REST API + Prometheus — мониторинг и метрики ✅ Console Light — веб-интерфейс для наблюдения за сервером ✅ Легковесность, высокая производительность, минималистичная конфигурация Мы используем Angie только как обратный прокси — без хостинга файлов. Вместо того чтобы: Открывать десятки портов Давать пользователям прямой доступ к сервисам Управлять сертификатами вручную Обратный прокси: два уровня инфраструктуры 1. Базовое проксирование (Стандарт) Принимает весь трафик на порт 443, распределяет запросы по сервисам (например, site1.example.com → сервер А, site2.example.com → сервер Б). Скрывает внутреннюю архитектуру, централизует SSL и защиту. 2. Прокси как шлюз доступа IP-фильтрация (просто): Пользователи обращаются только к IP прокси через порт 443. Пример: finance.example.com доступен с IP 192.168.1.10 и 192.168.1.20. admin.example.com — с IP 10.0.0.5. SSO (гибко): Единый вход через CASdoor + Angie: пользователь получает доступ только к тем сервисам в изолированном VLAN, на которые у него есть права. Преимущества: Для сервисов в одном VLAN не нужны отдельные сетевые правила для пользователей из других VLAN. Достаточно открыть один порт 443 до прокси — фильтрация и SSO (через CASdoor или аналоги) настраиваются централизованно. Итог: Прокси обеспечивает базовую безопасность (уровень 1) и заменяет сложные ACL единым шлюзом для доступа к сервисам в VLAN (уровень 2). Мы создаём единую точку входа: 🔒 Только порт 443 открыт наружу 🌐 Все сервисы доступны по поддоменам (grafana.test, whoami.test) 🛡️ Вся инфраструктура изолирована в Docker-сетях 🔄 Новые сервисы добавляются автоматически через лейблы Три способа проксирования Способ Особенности 1. С хоста proxy_pass http://192.168.88.7:8080 2. Через Docker DNS proxy_pass http://whoami; 3. Через Docker-модуль Управление через лейблы в yaml, - "angie.http.upstreams.docker_dmodulwhoami.port=80" 📁 Структура каталогов front-proxy/ # Основной каталог прокси
|
||
├── angie.conf # Главный конфиг Angie
|
||
├── compose.yaml # Docker Compose для Angie + Docker Socket Proxy
|
||
├── conf.d/ # Общие настройки: proxy, security, limits
|
||
├── genloc/ # Общие location-правила (favicon, robots.txt и т.д.)
|
||
├── http.d/ # Server-блоки для каждого сервиса
|
||
└── ssl/ # TLS-сертификаты (локальные или ACME)
|
||
|
||
# Тестовые сервисы (для демонстрации трёх способов проксирования)
|
||
hostwhoami/ # Способ 1: проксирование с хоста
|
||
└── hostwhoami.yaml
|
||
dockerwhoami/ # Способ 2: через Docker DNS
|
||
└── dockerwhoami.yaml
|
||
dmodulwhoami/ # Способ 3: через Docker-модуль
|
||
└── dmodulwhoami.yaml
|
||
Объяснить код с Главный конфиг Angie vim angie.conf
|
||
Объяснить код с # Автоматическое количество рабочих процессов (по числу CPU)
|
||
worker_processes auto;
|
||
|
||
# Увеличенный лимит открытых файловых дескрипторов на процесс
|
||
worker_rlimit_nofile 65535;
|
||
|
||
events {
|
||
# Разрешить приёму одного worker'а нескольких соединений за раз
|
||
multi_accept on;
|
||
|
||
# Максимальное число одновременных соединений на worker
|
||
worker_connections 65535;
|
||
}
|
||
|
||
http {
|
||
#Подключение к Docker API через proxy
|
||
docker_endpoint http://docker-socket-proxy:2375;
|
||
|
||
# Максимальный размер буфера для ответов Docker API
|
||
# (достаточно для ~50 контейнеров; увеличить при большом количестве)
|
||
docker_max_object_size 128k;
|
||
|
||
# Кодировка по умолчанию
|
||
charset utf-8;
|
||
|
||
# Оптимизации передачи файлов
|
||
sendfile on; # Использовать системный вызов sendfile()
|
||
tcp_nopush on; # Отправлять заголовки целиком
|
||
tcp_nodelay on; # Отключить алгоритм Нейгла для интерактивных соединений
|
||
|
||
# Безопасность: скрыть версию сервера
|
||
server_tokens off;
|
||
|
||
# Не логировать ошибки 404
|
||
log_not_found off;
|
||
|
||
# Увеличенный размер хеш-таблицы для MIME-типов
|
||
types_hash_max_size 2048;
|
||
|
||
# Максимальный размер тела запроса от клиента
|
||
client_max_body_size 16M;
|
||
|
||
# MIME-типы
|
||
include mime.types;
|
||
default_type application/octet-stream;
|
||
|
||
# Логирование
|
||
access_log /var/log/angie/access.log;
|
||
error_log /var/log/angie/error.log warn;
|
||
|
||
# Ограничение частоты запросов (защита от брутфорса)
|
||
limit_req_log_level warn;
|
||
limit_req_zone $binary_remote_addr zone=login:10m rate=10r/m;
|
||
|
||
# Настройки SSL/TLS
|
||
ssl_session_timeout 1d; # Время жизни SSL-сессии
|
||
ssl_session_cache shared:SSL:10m; # Общая память для кэширования сессий
|
||
ssl_session_tickets off; # Отключить session tickets (безопаснее)
|
||
|
||
# Только современный протокол TLS 1.3
|
||
ssl_protocols TLSv1.3;
|
||
|
||
# OCSP Stapling (требует доверенного CA)
|
||
ssl_stapling off; # Включить, если будет свой CA
|
||
ssl_stapling_verify off; # Включить, если будет свой CA
|
||
|
||
# Общие переиспользуемые настройки (proxy, security и т.д.)
|
||
include /etc/angie/conf.d/*.conf;
|
||
|
||
# Серверные блоки для каждого сервиса
|
||
include /etc/angie/http.d/*.conf;
|
||
}
|
||
Объяснить код с Docker Compose для Angie + Docker Socket Proxy vim compose.yaml
|
||
Объяснить код с services:
|
||
docker-socket-proxy:
|
||
# Безопасный прокси для Docker Socket — даёт Angie доступ только на чтение списка контейнеров
|
||
image: tecnativa/docker-socket-proxy:v0.4.2
|
||
container_name: docker-socket-proxy
|
||
restart: unless-stopped
|
||
# Требуется privileged для доступа к /var/run/docker.sock в некоторых системах
|
||
privileged: true
|
||
volumes:
|
||
# Монтируем сокет только на чтение (:ro) — нельзя управлять контейнерами
|
||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||
environment:
|
||
CONTAINERS: 1 # Чтение списка контейнеров
|
||
NETWORKS: 1 # Чтение сетевых настроек (для получения IP)
|
||
EVENTS: 1 # Подписка на события (запуск/остановка контейнеров)
|
||
networks:
|
||
- front-proxy
|
||
|
||
front-proxy:
|
||
# Основной обратный прокси-сервер
|
||
image: docker.angie.software/angie:1.11.2
|
||
container_name: front-proxy
|
||
restart: unless-stopped
|
||
environment:
|
||
- TZ=UTC-5
|
||
ports:
|
||
# Открываем только стандартные порты HTTP/HTTPS
|
||
- "80:80"
|
||
- "443:443"
|
||
volumes:
|
||
# Все конфиги монтируются из текущего каталога
|
||
- ./angie.conf:/etc/angie/angie.conf:ro
|
||
- ./http.d/:/etc/angie/http.d/:ro
|
||
- ./conf.d:/etc/angie/conf.d/:ro
|
||
- ./genloc:/etc/angie/genloc/:ro
|
||
- ./ssl:/etc/angie/ssl/:ro
|
||
networks:
|
||
- front-proxy # Подключаемся к той же сети, что и docker-socket-proxy
|
||
- app-net # Подключиться ко всем сетям, где есть сервисы, иначе Angie их не увидит
|
||
|
||
networks:
|
||
front-proxy:
|
||
# Используем существующую сеть или создаём новую с заданной подсетью
|
||
name: front-proxy
|
||
external: true
|
||
app-net:
|
||
name: app-net
|
||
external: true
|
||
Объяснить код с Заглушка для первого запуска http.d/default.conf vim default.conf
|
||
Объяснить код с # Заглушка для первого запуска
|
||
# Обеспечивает минимальный server-блок, чтобы Angie запустился
|
||
# Будет обрабатывать только запросы к IP или неизвестным доменам
|
||
# Реальные сервисы должны иметь свои server-блоки с конкретными server_name
|
||
|
||
server {
|
||
listen 80 default_server;
|
||
listen [::]:80 default_server;
|
||
|
||
# Заглушка для неизвестных доменов
|
||
return 444; # закрывает соединение без ответа
|
||
}
|
||
Объяснить код с Запускаем и логах видно, что всё работает корректно 🛠️ Общие конфигурационные файлы Чтобы не дублировать настройки в каждом server-блоке, используем переиспользуемые фрагменты. conf.d/proxy.conf — стандартные заголовки проксирования proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; 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-Host $host; proxy_set_header X-Forwarded-Port $server_port; Объяснить код с proxy_http_version 1.1 — поддержка keep-alive и WebSocket Upgrade + Connection — корректная работа WebSocket и HTTP/2 X-Real-IP, X-Forwarded-* — передача оригинальных данных клиента бэкенду (без этого все запросы будут приходить «от Angie») Включается в location через include /etc/angie/conf.d/proxy.conf; conf.d/security.conf — безопасные HTTP-заголовки add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; Объяснить код с Включается в server через include /etc/angie/conf.d/security.conf; genloc/general-location.conf — общие правила для всех сервисов # правила отключают логирование для служебных файлов favicon.ico и robots.txt, чтобы очистить логи, и блокируют доступ ко всем скрытым файлам (кроме .well-known) location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { log_not_found off; access_log off; } # Запрет .файлов (кроме .well-known) location ~ /\.(?!well-known) { deny all; } Объяснить код с Включается в server через include /etc/angie/genloc/general-location.conf; 🔐 Локальный TLS-сертификат для тестовых доменов Для работы по HTTPS наши тестовые сервисы используют следующие домены: hostwhoami.test — проксирование с хоста dockerwhoami.test — проксирование через Docker DNS dmodulwhoami.test — автоматическое управление через Docker-модуль Чтобы все они работали по HTTPS, мы генерируем один wildcard-сертификат на *.test, который покрывает любой поддомен зоны .test. Сертификат использует современное шифрование: Алгоритм: ECDSA на кривой prime256v1 (P-256) — безопаснее и быстрее RSA Поддержка wildcard *.test через subjectAltName Срок действия: 10 лет Генерация сертификата Выполните в каталоге front-proxy/: mkdir -p ssl openssl req -x509 \ -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ -days 3650 \ -nodes \ -keyout ssl/server.key \ -out ssl/server.crt \ -subj "/CN=*.test" \ -addext "subjectAltName=DNS:*.test,DNS:test" Объяснить код с ✅ Этот сертификат будет автоматически использоваться тестовыми сайтами через общие директивы в их server-блоках: ssl_certificate /etc/angie/ssl/server.crt;
|
||
ssl_certificate_key /etc/angie/ssl/server.key;
|
||
Объяснить код с 🧪 Практические примеры: два классических способа проксирования Все тестовые сервисы используют образ traefik/whoami — легковесный HTTP-сервер, который выводит информацию о запросе (IP, заголовки, метод и т.д.). 🔒 Оба способа работают по HTTPS (https://*.test) и включают: Автоматическое перенаправление с HTTP → HTTPS Безопасные заголовки Защиту от утечки .файлов Логирование ошибок в отдельный файл Не используйте proxy_pass http://имя\_контейнера; или домена напрямую! Это создаёт статический upstream, который: Требует существования контейнера/домена при старте Angie Если сервис недоступен — весь прокси не запустится Ломает динамический резолвинг для других сервисов Плохо (статический резолвинг): proxy_pass http://dockerwhoami:80; Объяснить код с Хорошо (динамический резолвинг): resolver 127.0.0.11 valid=10s; # Docker DNS set $backend dockerwhoami; proxy_pass http://$backend:80; Объяснить код с Способ 1: Проксирование сервиса, запущенного на хосте (hostwhoami/) Когда использовать: Когда бэкенд не находится в Docker-сети прокси, например: Сервис запущен на хосте (на порту 8080, 3000 и т.д.) Приложение работает на другом сервере во внутренней сети Старый сервис, который нельзя или не нужно интегрировать в Docker-сеть 💡 Поскольку порт 80 на хосте уже занят Angie, сервис запускается на порту 8080, и именно его проксирует Angie. hostwhoami/hostwhoami.yaml services: hostwhoami: image: traefik/whoami container_name: hostwhoami restart: unless-stopped ports: - "8080:80" # ← проброс 8080 хоста → 80 контейнера Объяснить код с 🔒 Контейнер не подключён к сети front-proxy — он доступен только через хостовой порт 8080. http.d/hostwhoami.conf # HTTPS-сервер для hostwhoami.test server { # Слушаем порт 443 (HTTPS) для IPv4 и IPv6 listen 443 ssl; listen [::]:443 ssl; # Включаем HTTP/2 для улучшения производительности http2 on; # Доменное имя сервиса server_name hostwhoami.test; # Пути к TLS-сертификату и приватному ключу ssl_certificate /etc/angie/ssl/server.crt; ssl_certificate_key /etc/angie/ssl/server.key; # Включаем безопасные HTTP-заголовки include /etc/angie/conf.d/security.conf; # Отдельный файл логов ошибок для этого сервиса error_log /var/log/angie/hostwhoami.test.error.log warn; # Основной location — проксируем все запросы location / { # Используем DNS-резолвер Docker, valid=10s — кэшировать результаты на 10 секунд resolver 127.0.0.11 valid=10s; # Сохраняем IP-адрес целевого сервера в переменную # Такой подход работает одинаково и для доменов, и для IP set $backend 192.168.88.7; # Проксируем запросы на указанный адрес и порт # Даже если сервер временно недоступен — Angie запустится и будет работать для других сервисов proxy_pass http://$backend:8080; # Передаём стандартные заголовки проксирования include /etc/angie/conf.d/proxy.conf; } # Общие правила для всех сервисов: include /etc/angie/genloc/general-location.conf; } # Автоматическое перенаправление с HTTP на HTTPS server { # Слушаем порт 80 (HTTP) для IPv4 и IPv6 listen 80; listen [::]:80; # Доменное имя сервиса server_name hostwhoami.test; # Перенаправляем все HTTP-запросы на HTTPS с тем же URL return 301 https://$host$request_uri; } Объяснить код с ✅ Преимущество: максимальная гибкость — можно проксировать любой сервис. После добавления или изменения конфигурационных файлов в http.d/ необходимо перезагрузить контейнер front-proxy, чтобы Angie применил новые настройки. Способ 2: Проксирование через Docker DNS (dockerwhoami/) Когда использовать: Когда сервис запущен в той же Docker-сети, что и Angie. Безопасность: Трафик никогда не покидает Docker-сеть front-proxy Нет необходимости открывать порты на хосте Полная сетевая изоляция dockerwhoami/dockerwhoami.yaml services: dockerwhoami: image: traefik/whoami container_name: dockerwhoami restart: unless-stopped networks: - front-proxy networks: front-proxy: name: front-proxy external: true Объяснить код с http.d/dockerwhoami.conf # HTTPS-сервер для dockerwhoami.test server { # Слушаем порт 443 (HTTPS) для IPv4 и IPv6 listen 443 ssl; listen [::]:443 ssl; # Включаем HTTP/2 для улучшения производительности http2 on; # Доменное имя сервиса server_name dockerwhoami.test; # Пути к TLS-сертификату и приватному ключу ssl_certificate /etc/angie/ssl/server.crt; ssl_certificate_key /etc/angie/ssl/server.key; # Включаем безопасные HTTP-заголовки include /etc/angie/conf.d/security.conf; # Отдельный файл логов ошибок для этого сервиса error_log /var/log/angie/dockerwhoami.test.error.log warn; # Основной location — проксируем все запросы location / { # Используем DNS-резолвер Docker, valid=10s — кэшировать результаты на 10 секунд resolver 127.0.0.11 valid=10s; # Сохраняем имя контейнера в переменную set $backend dockerwhoami; # Проксируем на контейнер с именем "dockerwhoami" в той же Docker-сети # Даже если сервер временно недоступен — Angie запустится и будет работать для других сервисов proxy_pass http://$backend:80; # Передаём стандартные заголовки проксирования include /etc/angie/conf.d/proxy.conf; } # Общие правила для всех сервисов: include /etc/angie/genloc/general-location.conf; } # Автоматическое перенаправление с HTTP на HTTPS server { # Слушаем порт 80 (HTTP) для IPv4 и IPv6 listen 80; listen [::]:80; # Доменное имя сервиса server_name dockerwhoami.test; # Перенаправляем все HTTP-запросы на HTTPS с тем же URL return 301 https://$host$request_uri; } Объяснить код с ✅ Преимущество: безопасность, простота, отказоустойчивость. После добавления или изменения конфигурационных файлов в http.d/ необходимо перезагрузить контейнер front-proxy, чтобы Angie применил новые настройки. 🧪 Практический пример: через Docker-модуль Способ 3: Автоматическое проксирование через Docker-модуль (dmodulwhoami/) Angie подключается к Docker API через Socket Proxy При запуске контейнера Angie автоматически читает его лейблы Контейнер может находиться в любой Docker-сети, доступной Angie Сервер мгновенно добавляется в upstream без перезагрузки ✅ Главное преимущество: Добавление/удаление сервисов работает без перезагрузки Angie Неважен порядок запуска — даже если контейнер появится позже, всё заработает Если сервис упадёт — он автоматически исчезнет из upstream 📚 Официальная документация dmodulwhoami/dmodulwhoami.yaml services: dmodulwhoami: image: traefik/whoami container_name: dmodulwhoami restart: unless-stopped networks: - app-net labels: # Указываем, что контейнер должен быть добавлен в upstream "docker_dmodulwhoami" - "angie.http.upstreams.docker_dmodulwhoami.port=80" # Явно указываем, из какой сети брать IP - "angie.network=app-net" networks: app-net: name: app-net Объяснить код с conf.d/00-upstreams-docker.conf # Upstream, управляемый Docker-модулем upstream docker_dmodulwhoami { zone docker_dmodulwhoami 64k; # обязательная зона разделяемой памяти } Объяснить код с http.d/dmodulwhoami.conf server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name dmodulwhoami.test; ssl_certificate /etc/angie/ssl/server.crt; ssl_certificate_key /etc/angie/ssl/server.key; include /etc/angie/conf.d/security.conf; error_log /var/log/angie/dmodulwhoami.test.error.log warn; location / { proxy_pass http://docker_dmodulwhoami; # ← upstream управляется модулем include /etc/angie/conf.d/proxy.conf; } include /etc/angie/genloc/general-location.conf; } server { listen 80; listen [::]:80; server_name dmodulwhoami.test; return 301 https://$host$request_uri; } Объяснить код с — сервис https://dmodulwhoami.test становится доступен мгновенно, без перезагрузки прокси. 🖥️ Подключение панели мониторинга Console Light Console Light — встроенная веб-панель мониторинга Angie, которая отображает ключевые показатели нагрузки и производительности в реальном времени без перезагрузки сервера. ✅ Преимущества консоли: Мониторинг всех HTTP/TCP-серверов и апстримов Отслеживание состояния контейнеров в Docker-сетях Визуализация трафика, соединений и времени отклика Управление конфигурацией без перезагрузки (в Angie PRO) Не требует внешних инструментов — работает на базе API Angie Веб-панель мониторинга Console Light 🔧 Установка и настройка Console Light 1. Создание пользователя для доступа к консоли Сначала создайте каталог для хранения паролей и сгенерируйте файл .htpasswd: mkdir -p auth htpasswd -c auth/.htpasswd admin Объяснить код с В процессе выполнения команды будет предложено ввести пароль для пользователя admin. 2. Добавление конфигурации в Docker Compose Добавьте монтирование файла аутентификации в compose.yaml: services: front-proxy: # ... остальные настройки volumes: # ... остальные тома - ./auth/.htpasswd:/etc/angie/.htpasswd:ro Объяснить код с 3. Создание конфигурации для консоли Создайте файл http.d/console.conf со следующим содержимым: # HTTPS-сервер для console.test server { # Слушаем порт 443 (HTTPS) для IPv4 и IPv6 listen 443 ssl; listen [::]:443 ssl; # Включаем HTTP/2 и HTTP/3 для улучшения производительности http2 on; http3 on; # Доменное имя панели мониторинга server_name console.test; # Пути к TLS-сертификату и приватному ключу ssl_certificate /etc/angie/ssl/server.crt; ssl_certificate_key /etc/angie/ssl/server.key; # Ограничение доступа только по IP-адресу allow 192.168.*.*; # разрешаем доступ по конкретному IP deny all; # запрещаем доступ со всех остальных адресов # Отдельный файл логов ошибок для панели error_log /var/log/angie/console.test.error.log warn; # Активируем мониторинг самого сервера консоли status_zone console.test; # Основной location для Console Light location / { # Аутентификация для интерфейса auth_basic "Angie Console Light"; auth_basic_user_file /etc/angie/.htpasswd; # Путь к файлам Console Light alias /usr/share/angie-console-light/html/; index index.html; # API для получения статистики в реальном времени location /api/ { api /status/; } } } # Автоматическое перенаправление с HTTP на HTTPS server { listen 80; listen [::]:80; server_name console.test; return 301 https://$host$request_uri; } Объяснить код с 4. Добавление метрик в существующие серверы Чтобы консоль отображала данные по вашим сервисам, добавьте директиву status_zone в каждый серверный блок: server { # ... остальные настройки server_name dockerwhoami.test; # Добавляем метрику для мониторинга status_zone dockerwhoami.test; # ... остальные настройки } Объяснить код с Полный пример с добавлением метрики # HTTPS-сервер для dockerwhoami.test
|
||
server {
|
||
# Слушаем порт 443 (HTTPS) для IPv4 и IPv6
|
||
listen 443 ssl;
|
||
listen [::]:443 ssl;
|
||
|
||
# Включаем HTTP/2 для улучшения производительности
|
||
http2 on;
|
||
|
||
# Доменное имя сервиса
|
||
server_name dockerwhoami.test;
|
||
|
||
# Добавляем метрику для мониторинга
|
||
status_zone dockerwhoami.test;
|
||
|
||
# Пути к TLS-сертификату и приватному ключу
|
||
ssl_certificate /etc/angie/ssl/server.crt;
|
||
ssl_certificate_key /etc/angie/ssl/server.key;
|
||
|
||
# Включаем безопасные HTTP-заголовки
|
||
include /etc/angie/conf.d/security.conf;
|
||
|
||
# Отдельный файл логов ошибок для этого сервиса
|
||
error_log /var/log/angie/dockerwhoami.test.error.log warn;
|
||
|
||
# Основной location — проксируем все запросы
|
||
location / {
|
||
# Используем DNS-резолвер Docker, valid=10s — кэшировать результаты на 10 секунд
|
||
resolver 127.0.0.11 valid=10s;
|
||
|
||
# Сохраняем имя контейнера в переменную
|
||
set $backend dockerwhoami;
|
||
|
||
# Проксируем на контейнер с именем "dockerwhoami" в той же Docker-сети
|
||
# Даже если сервер временно недоступен — Angie запустится и будет работать для других сервисов
|
||
proxy_pass http://$backend:80;
|
||
|
||
# Передаём стандартные заголовки проксирования
|
||
include /etc/angie/conf.d/proxy.conf;
|
||
}
|
||
|
||
# Общие правила для всех сервисов:
|
||
include /etc/angie/genloc/general-location.conf;
|
||
}
|
||
|
||
# Автоматическое перенаправление с HTTP на HTTPS
|
||
server {
|
||
# Слушаем порт 80 (HTTP) для IPv4 и IPv6
|
||
listen 80;
|
||
listen [::]:80;
|
||
|
||
# Доменное имя сервиса
|
||
server_name dockerwhoami.test;
|
||
|
||
# Перенаправляем все HTTP-запросы на HTTPS с тем же URL
|
||
return 301 https://$host$request_uri;
|
||
}
|
||
Объяснить код с Для мониторинга состояния бэкендов необходимо объявить zone в каждом upstream-блоке. Сервисы через Docker-модуль (уже прописаны) 💡 Пояснение: status_zone в server → мониторинг виртуального хоста zone в upstream → мониторинг бэкендов (состояние, время ответа, ошибки) 5. Для DNS-резолвера добавьте status_zone в общую конфигурацию в angie.conf http {
|
||
# DNS resolver с мониторингом (один для всего сервера)
|
||
resolver 127.0.0.11 valid=10s status_zone=docker_dns;
|
||
|
||
#Подключение к Docker API через proxy
|
||
docker_endpoint http://docker-socket-proxy:2375;
|
||
# ... остальные настройки
|
||
Объяснить код с После добавления или изменения конфигурационных файлов необходимо перезагрузить контейнер front-proxy Дальше: ACME + Smallstep CA — автоматизация TLS для всех доменов (публичных через Let’s Encrypt и внутренних через локальный CA) CASdoor — централизованная аутентификация и авторизация Единая точка входа — безопасный, удобный и управляемый доступ ко всем сервисам
|
||
==============
|
||
Angie — современный веб-сервер, созданный бывшими разработчиками nginx. Он сочетает проверенную архитектуру nginx с новыми возможностями: HTTP/3, встроенный Docker-модуль, ACME-клиент для автоматического получения TLS-сертификатов, REST API + Prometheus для мониторинга и Console Light для веб-интерфейса. Angie используется как обратный прокси, скрывая внутреннюю архитектуру и обеспечивая централизованную защиту.
|
||
Основные функции: базовое проксирование, прокси как шлюз с IP-фильтрацией и SSO через CASdoor. Преимущества: безопасность, упрощение управления, единая точка входа, мониторинг.
|
||
Примеры использования:
|
||
1. Проксирование сервиса на хосте (hostwhoami/) через Docker DNS (dockerwhoami/) или Docker-модуль (dmodulwhoami/).
|
||
2. Консоль мониторинга Console Light для отслеживания состояния сервисов.
|
||
3. Автоматическая настройка TLS-сертификатов через ACME + Smallstep CA.
|
||
4. Использование CASdoor для централизованной аутентификации и авторизации.
|