Angie — замена Nginx: установка, PHP, MariaDB, Let's Encrypt и HTTP/3
Angie — это форк Nginx, созданный бывшими разработчиками оригинального веб-сервера. Проект появился в 2022 году и быстро набрал популярность благодаря активной разработке, готовым модулям в репозитории и встроенной поддержке современных протоколов. В этой статье настроим полноценный веб-стек: Angie + PHP-FPM + MariaDB + Let's Encrypt + HTTP/3.
Angie vs Nginx: в чём разница?
Angie создан командой, которая ранее разрабатывала Nginx в компании F5 Networks. После ухода из F5 разработчики основали собственный проект, сохранив полную совместимость с конфигурацией Nginx:
- Готовые модули в репозитории — Brotli, ZStd, GeoIP2, NTLS и другие модули устанавливаются через apt/yum, а не через пересборку
- Встроенная поддержка ACME — автоматическое получение и обновление сертификатов Let's Encrypt без Certbot
- HTTP/3 (QUIC) из коробки — не нужны сторонние патчи
- Улучшенная статистика — расширенный модуль мониторинга с API
- Активная разработка — релизы каждые 2-4 недели (Nginx — раз в полгода)
- Полная совместимость — конфигурации Nginx работают в Angie без изменений
/etc/angie/ вместо /etc/nginx/.Установка Angie на Debian/Ubuntu
Подключение репозитория
# Зависимости
sudo apt update && sudo apt install -y ca-certificates curl gnupg
# GPG-ключ
curl -o /etc/apt/trusted.gpg.d/angie-signing.gpg \
https://angie.software/keys/angie-signing.gpg
# Репозиторий
echo "deb https://download.angie.software/angie/$(. /etc/os-release && echo "$ID/$VERSION_ID $VERSION_CODENAME") main" \
| sudo tee /etc/apt/sources.list.d/angie.list
# Установка
sudo apt update && sudo apt install -y angie
Установка модулей
Одно из главных преимуществ Angie — модули устанавливаются как обычные пакеты:
# Сжатие Brotli и ZStd
sudo apt install -y angie-module-brotli angie-module-zstd
# GeoIP2 (опционально)
sudo apt install -y angie-module-geoip2
# Проверка установки
sudo angie -V
Проверка работоспособности
sudo systemctl enable --now angie
curl -I http://localhost
# Должен вернуть: Server: Angie/x.x.x
Базовая конфигурация
Основной файл конфигурации: /etc/angie/angie.conf. Структура идентична nginx.conf:
user www-data;
worker_processes auto;
pid /run/angie.pid;
# Загрузка модулей сжатия
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
load_module modules/ngx_http_zstd_filter_module.so;
load_module modules/ngx_http_zstd_static_module.so;
events {
worker_connections 1024;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
# Логирование
access_log /var/log/angie/access.log;
error_log /var/log/angie/error.log;
# Производительность
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 64m;
# Gzip-сжатие
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 4;
gzip_min_length 1000;
gzip_types text/plain text/css application/json
application/javascript text/xml application/xml
application/xml+rss text/javascript image/svg+xml;
# Brotli-сжатие
brotli on;
brotli_comp_level 4;
brotli_types text/plain text/css application/json
application/javascript text/xml application/xml
application/xml+rss text/javascript image/svg+xml;
# ZStd-сжатие
zstd on;
zstd_comp_level 3;
zstd_types text/plain text/css application/json
application/javascript text/xml application/xml
application/xml+rss text/javascript image/svg+xml;
# Безопасность
server_tokens off;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
# Виртуальные хосты
include /etc/angie/sites-enabled/*;
}
Структура каталогов
# Создаём привычную структуру sites-available/sites-enabled
sudo mkdir -p /etc/angie/{sites-available,sites-enabled,templates}
Настройка виртуальных хостов
Создаём конфигурацию сайта /etc/angie/sites-available/example.com.conf:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.php;
# Логи сайта
access_log /var/log/angie/example.com-access.log;
error_log /var/log/angie/example.com-error.log;
location / {
try_files $uri $uri/ =404;
}
# Запрет доступа к скрытым файлам
location ~ /\. {
deny all;
}
}
# Активируем сайт
sudo ln -s /etc/angie/sites-available/example.com.conf \
/etc/angie/sites-enabled/
# Создаём корневой каталог
sudo mkdir -p /var/www/example.com
echo '<h1>Angie works!</h1>' | sudo tee /var/www/example.com/index.html
# Проверка и перезагрузка
sudo angie -t && sudo systemctl reload angie
PHP-FPM: подключение PHP
Установка PHP
# PHP-FPM и основные модули
sudo apt install -y php-fpm php-cli php-common \
php-mysql php-pgsql php-curl php-gd \
php-mbstring php-xml php-zip php-intl \
php-opcache php-redis
# Проверяем версию и сокет
php -v
ls /run/php/php*-fpm.sock
Шаблон PHP-FPM для Angie
Создаём переиспользуемый шаблон /etc/angie/templates/php-fpm.conf:
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# Таймауты для тяжёлых скриптов
fastcgi_read_timeout 300;
fastcgi_send_timeout 300;
}
Подключаем шаблон в виртуальном хосте:
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.php index.html;
include templates/php-fpm.conf;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
Оптимизация PHP-FPM
Редактируем пул /etc/php/8.2/fpm/pool.d/www.conf:
; Для сервера с 2-4 ГБ RAM
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500
sudo systemctl restart php8.2-fpm
MariaDB: установка и настройка
# Установка
sudo apt install -y mariadb-server
# Безопасная инициализация
sudo mysql_secure_installation
При выполнении mysql_secure_installation:
- Задайте пароль root
- Удалите анонимных пользователей — Yes
- Запретите удалённый вход root — Yes
- Удалите тестовую базу — Yes
- Перезагрузите привилегии — Yes
Создание базы данных и пользователя
sudo mariadb
-- Создаём пользователя для веб-приложения
CREATE USER 'webapp'@'localhost' IDENTIFIED BY 'StrongPassword123!';
-- Даём права на все базы с префиксом webapp_
GRANT ALL PRIVILEGES ON `webapp\_%`.* TO 'webapp'@'localhost';
-- Создаём базу
CREATE DATABASE webapp_production CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON webapp_production.* TO 'webapp'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Let's Encrypt: автоматические SSL-сертификаты
Главная фишка Angie — встроенный ACME-клиент. Не нужен Certbot, не нужны cron-задачи для обновления. Angie сам получает и обновляет сертификаты:
Настройка ACME-клиента
В блоке http файла /etc/angie/angie.conf добавляем:
http {
# DNS-резолвер для ACME
resolver 127.0.0.53 8.8.8.8;
# Определяем ACME-клиент
acme_client letsencrypt https://acme-v02.api.letsencrypt.org/directory;
# ... остальная конфигурация
}
Настройка виртуального хоста с SSL
server {
listen 80;
server_name example.com www.example.com;
# Редирект на HTTPS
return 301 https://$host$request_uri;
}
server {
# HTTP/2 + HTTP/3 (QUIC)
listen 443 ssl;
listen 443 quic reuseport;
http2 on;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html;
# ACME-сертификат (автоматическое получение)
acme letsencrypt;
ssl_certificate $acme_cert_letsencrypt;
ssl_certificate_key $acme_cert_key_letsencrypt;
# Современные параметры SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# HTTP/3 анонс
add_header Alt-Svc 'h3=":443"; ma=86400' always;
include templates/php-fpm.conf;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
Проверка SSL и HTTP/3
# Проверка конфигурации
sudo angie -t && sudo systemctl reload angie
# Тест SSL
curl -I https://example.com
# Должен быть: alt-svc: h3=":443"; ma=86400
# Тест HTTP/3
curl --http3 https://example.com
Для проверки HTTP/3 извне используйте сервис http3check.net.
# Открываем UDP 443 для QUIC
sudo ufw allow 443/udp
# или через iptables:
sudo iptables -A INPUT -p udp --dport 443 -j ACCEPT
phpMyAdmin: веб-управление базой
sudo apt install -y phpmyadmin
Создаём шаблон /etc/angie/templates/phpmyadmin.conf:
location /phpmyadmin {
alias /usr/share/phpmyadmin;
index index.php;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}
# Ограничение доступа по IP (рекомендуется!)
location /phpmyadmin {
allow 192.168.1.0/24;
allow 10.0.0.0/8;
deny all;
}
Мониторинг и логирование
Расширенная статистика Angie
# В server-блоке или отдельном server на localhost
location /status {
api /status/;
allow 127.0.0.1;
deny all;
}
# Просмотр статистики
curl http://127.0.0.1/status/ | python3 -m json.tool
Ротация логов
# /etc/logrotate.d/angie
/var/log/angie/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /run/angie.pid ] && kill -USR1 $(cat /run/angie.pid)
endscript
}
Оптимизация производительности
Кэширование статики
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
FastCGI-кэш
# В блоке http:
fastcgi_cache_path /var/cache/angie/fastcgi
levels=1:2 keys_zone=PHPCACHE:64m
inactive=60m max_size=512m;
# В блоке server:
fastcgi_cache PHPCACHE;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_valid 200 60m;
fastcgi_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
Безопасность веб-сервера
# Скрыть версию сервера
server_tokens off;
# Защита от кликджекинга
add_header X-Frame-Options "SAMEORIGIN" always;
# CSP (Content Security Policy) — базовый
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;" always;
# Запрет выполнения PHP в uploads
location ~* /uploads/.*\.php$ {
deny all;
}
# Rate limiting
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
location /api/ {
limit_req zone=api burst=20 nodelay;
}
Миграция с Nginx на Angie
Процесс миграции максимально простой:
# 1. Бэкап конфигурации Nginx
sudo cp -r /etc/nginx /etc/nginx.backup
# 2. Остановка Nginx
sudo systemctl stop nginx
sudo systemctl disable nginx
# 3. Установка Angie (см. раздел выше)
sudo apt install -y angie
# 4. Копирование конфигурации
sudo cp /etc/nginx/nginx.conf /etc/angie/angie.conf
sudo cp -r /etc/nginx/sites-available/* /etc/angie/sites-available/
sudo cp -r /etc/nginx/sites-enabled/* /etc/angie/sites-enabled/
# 5. Замена путей в конфигах
sudo sed -i 's|/etc/nginx|/etc/angie|g' /etc/angie/angie.conf
sudo sed -i 's|/etc/nginx|/etc/angie|g' /etc/angie/sites-available/*
# 6. Проверка и запуск
sudo angie -t && sudo systemctl enable --now angie
Angie — это бесплатно?
Да, Angie имеет бесплатную open-source версию под BSD-like лицензией. Также есть коммерческая версия Angie PRO с расширенной поддержкой и дополнительными модулями (WAF, расширенный мониторинг).
Совместимы ли конфигурации Nginx с Angie?
Да, полностью совместимы. Angie — это форк Nginx, и все директивы конфигурации работают одинаково. Единственное отличие — путь /etc/angie/ вместо /etc/nginx/ и дополнительные директивы (acme_client, и др.).
Поддерживает ли Angie HTTP/3?
Да, HTTP/3 (QUIC) поддерживается из коробки. Достаточно добавить listen 443 quic в конфигурацию. В отличие от Nginx, не нужны сторонние патчи или специальные сборки.
Как автоматически обновлять SSL-сертификаты в Angie?
Angie имеет встроенный ACME-клиент. Достаточно добавить директиву acme_client и acme в конфигурацию — сертификаты будут получены и обновлены автоматически без Certbot и cron.
Можно ли использовать Angie вместо Nginx в Docker?
Да, доступен официальный Docker-образ: docker pull docker.angie.software/angie. Конфигурация аналогична nginx-контейнеру, замена в docker-compose обычно сводится к смене image.
Настроим веб-серверы, SSL, мониторинг и всю инфраструктуру
Настройка серверов, домены, сети, безопасность и мониторинг — берём на себя всю инфраструктуру. Вы занимаетесь бизнесом, мы — вашими серверами.
Комментарии