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 для централизованной аутентификации и авторизации.
|