Angie — замена Nginx: установка, PHP, MariaDB, Let's Encrypt и HTTP/3

Linux / Веб-серверы Евгений Семёнов ~13 мин чтения ...
Веб-сервер Angie — замена Nginx

Angie — это форк Nginx, созданный бывшими разработчиками оригинального веб-сервера. Проект появился в 2022 году и быстро набрал популярность благодаря активной разработке, готовым модулям в репозитории и встроенной поддержке современных протоколов. В этой статье настроим полноценный веб-стек: Angie + PHP-FPM + MariaDB + Let's Encrypt + HTTP/3.

Angie vs Nginx: в чём разница?

Angie создан командой, которая ранее разрабатывала Nginx в компании F5 Networks. После ухода из F5 разработчики основали собственный проект, сохранив полную совместимость с конфигурацией 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:

  1. Задайте пароль root
  2. Удалите анонимных пользователей — Yes
  3. Запретите удалённый вход root — Yes
  4. Удалите тестовую базу — Yes
  5. Перезагрузите привилегии — 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;
    }
}
Преимущество Angie: В Nginx для Let's Encrypt нужен Certbot + cron + перезагрузка. В Angie сертификат получается автоматически при первом запросе к домену и обновляется без перезагрузки сервера.

Проверка 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.

Внимание: Для HTTP/3 (QUIC) необходимо открыть порт 443/UDP в файрволе. По умолчанию обычно открыт только 443/TCP.
# Открываем 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
Важно: Если у вас были сторонние модули Nginx (скомпилированные вручную), их нужно заменить на пакеты из репозитория Angie или пересобрать для 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.

IT-аутсорсинг

Настроим веб-серверы, SSL, мониторинг и всю инфраструктуру

Настройка серверов, домены, сети, безопасность и мониторинг — берём на себя всю инфраструктуру. Вы занимаетесь бизнесом, мы — вашими серверами.

12+лет на рынке
150+довольных клиентов
24/7поддержка

Комментарии