В 2025 году спор «nginx vs apache» по‑прежнему актуален для админов, девопсов и вебмастеров, которым нужно сочетать производительность, совместимость и простоту эксплуатации. Оба сервера зрелые, поддерживают http2
, интегрируются с php-fpm
и умеют работать в высоконагруженных сценариях. Но различия в архитектуре, модели конфигурирования и стоимости владения по‑прежнему приводят к разным оптимальным схемам. Ниже — практичный разбор без фанатизма, с фокусом на performance, compatibility и типовые конфигурации, пригодные для продакшена.
Ключевые отличия архитектуры
Главная разница — модель обработки соединений. Nginx изначально событийный и неблокирующий, с фокусом на эффективную работу с большим числом одновременных соединений, проксирование и балансировку. Apache исторически процессно/потоковый, но с mpm event
сильно приблизился к событийной модели, разгрузив потоки от ожидания I/O и позволив держать тысячи keep-alive соединений без взрывного роста потребления ресурсов.
Apache: MPM и эволюция к event
Apache поддерживает несколько MPM: prefork
, worker
и современный mpm event
. В 2025 году prefork
— опция для редких легаси‑кейсов (в частности, старого mod_php
), а worker
и особенно event
являются базовой рекомендацией. Пара mpm event
+ mod_http2
+ proxy_fcgi
для php-fpm
— стандарт де‑факто. Это уменьшает накладные расходы и близко подводит Apache к модели Nginx по обработке очередей событий, сохраняя при этом традиционную гибкость и совместимость с .htaccess.
Nginx: событийная модель по умолчанию
Nginx изначально проектировался как обратный прокси и HTTP‑сервер с неблокирующей I/O моделью. Это позволяет эффективно использовать CPU и память при высоком числе одновременных соединений (особенно TLS + keep‑alive + HTTP/2), выдаче статики и терминальном проксировании до бэкендов (PHP, Node.js, Python, gRPC). Строгая централизованная конфигурация без .htaccess
даёт предсказуемую производительность: сервер не «гуляет» по дереву каталогов на каждый запрос и не перечитывает правила динамически.
Коротко: Apache в связке
mpm event
+php-fpm
радикально сократил исторический разрыв, но Nginx по‑прежнему выигрывает у простых прокси‑и статик‑нагрузок и лучше масштабируется в сценариях высокой конкуренции соединений.
Performance и как его правильно мерить
Термин performance в контексте «nginx vs apache» — это не только RPS на синтетике. Важно учитывать реальный профиль нагрузки: долю TLS‑рукопожатий, использование http2
(мультиплексирование, хедер‑компрессия), процент кэш-хитов, размер статики (от мелких иконок до крупных ассетов), поведение бэкенда (PHP/DB), стойкость к медленным клиентам и пр. Ошибка многих «benchmarks» — мерить только раздачу маленьких файлов на локалхосте без TLS и без keep-alive
.
Надёжная методика минимально включает:
- Отдельные сеты для статики (размеры 1–10 КБ, 100–300 КБ, 1–5 МБ) и динамики (PHP через
php-fpm
). - Сценарии: plaintext HTTP/1.1, TLS +
http2
с ALPN, с/безkeep-alive
и с/без сжатия. - Холодное/тёплое состояние кэшей ОС (page cache) и самого веб‑сервера (например,
open_file_cache
в Nginx). - Параллельность: лестничная (ramp‑up) и длительные плато на высокой конкуренции (1k–20k соединений, если релевантно).
- Учёт лимитов: сокеты, файловые дескрипторы, ulimit, net.core somaxconn и пр., чтобы не мерить узкое место не на уровне веб‑сервера.
Типичные результаты на современных ядрах и OpenSSL показывают: Nginx сохраняет преимущество на статике, HTTPS‑терминации и «сыром» проксировании, особенно при большом числе одновременных клиентов. Apache с mpm event
демонстрирует сравнимые показатели на смешанных профилях и динамике через proxy_fcgi
, а также даёт выигрыш там, где решает гибкость .htaccess
и богатая экосистема модулей.
Совместимость и экосистема: где выигрывает каждый
Ключевой вопрос compatibility: приложения, документация и команды многих CMS исторически затачивались под Apache и .htaccess
. В 2025 году подавляющее большинство популярных CMS и фреймворков имеют готовые рецепты для Nginx, но в легаси‑ландшафте всё ещё встречаются плагины и инструкции строго под .htaccess
. Если вам критичны динамические директивы «на местах», Apache проще: включили AllowOverride
и отдали право проектам менять поведение (перенаправления, доступы, кэши) без перезагрузки сервера.
Nginx, напротив, требует централизованной конфигурации. Это дисциплинирует, упрощает контроль и часто ускоряет запросы (нет дискового обхода директорий на каждый запрос), но потребует явного портирования правил переписывания. Для типовых CMS такие маппинги давно известны, однако редкие хитрые конструкции из mod_rewrite
и директивы доступа иногда требуют ручного рефакторинга.
Модули: у Apache очень богатая экосистема модулей, включая mod_security
, mod_evasive
, mod_status
, и многие встроены «из коробки» в дистрибутивы. У Nginx функциональные расширения часто собираются отдельно (динамические модули, сторонние патчи) или решаются внешними сервисами/прокси. При этом Nginx традиционно лидирует в роли фронтового прокси: TLS‑терминация, кэширование, rate‑limit, балансировка, статик, в то время как Apache остаётся сильным как универсальный веб‑сервер с тонкой настройкой доступа и гибкостью конфигов.
HTTP/2 в 2025: что важно знать
http2
сегодня — стандарт по умолчанию в браузерах (через TLS с ALPN). Важно корректно включить ALPN, оптимизировать параметры TLS (сессионные тикеты, кривая, OCSP‑stapling) и следить за приоритетами потоков. Для реальной выдачи ассетов сегодня важнее балансировать количество доменов/поддоменов и контролировать кеширование, чем полагаться на push, который де‑факто признан вредным. И Nginx, и Apache отлично работают с http2
; в Apache за это отвечает mod_http2
, а в Nginx — опция http2
в listen
. Если сертификаты невалидны или просрочены — клиенты откатятся на HTTP/1.1: следите за актуальностью SSL-сертификаты.
PHP: только php-fpm
В 2025 году использовать mod_php
под prefork
— почти всегда антипаттерн. Индикативная связка для Apache — mpm event
+ proxy_fcgi
+ php-fpm
; для Nginx — php-fpm
через fastcgi_pass
. Это повышает изоляцию, упрощает масштабирование и даёт предсказуемые метрики. Тюнинг пула php-fpm
(pm
, max_children
, process_idle_timeout
, slowlog) критичнее, чем выбор веб‑сервера, для динамики на PHP.

Типовые схемы конфигурации в 2025
Nginx + PHP‑FPM (один сервер)
Базовая схема для PHP‑приложения с симпатичным профилем статики и переписыванием URL. Удобно добавлять кэш слоёв: от open_file_cache
до fastcgi_cache
для микрокеша.
server {
listen 443 ssl http2;
server_name example.com;
root /var/www/app/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Ключевые параметры, о которых часто забывают: client_max_body_size
для аплоадов, корректные fastcgi_buffers
для крупных заголовков, грамотные таймауты (client_body_timeout
, fastcgi_read_timeout
), и X‑Forwarded‑* заголовки при работе за балансировщиком.
Apache mpm_event + php-fpm
Современная сборка Apache, где http2
и proxy_fcgi
включены, а обработка PHP идёт через php-fpm
. Сохраняем гибкость .htaccess
и получаем адекватную производительность.
# mods-enabled: mpm_event, http2, proxy_fcgi, setenvif, ssl, headers, rewrite
<IfModule http2_module>
Protocols h2 http/1.1
</IfModule>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/app/public
<Directory "/var/www/app/public">
AllowOverride All
Require all granted
</Directory>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
Если .htaccess
не нужен, лучше отключить его обход и повысить performance: AllowOverride None
и все правила вынести в виртуальный хост. Это уменьшит файловую нагрузку и ускорит обработку запросов.
Nginx как фронт перед Apache
Компромиссный вариант для сильной зависимости от .htaccess
: Nginx выполняет роль TLS‑терминатора, кэширует и раздаёт статику и отдаёт динамику на Apache. Это снижает нагрузку на Apache и даёт современный фронт, при этом сохраняется совместимость.
server {
listen 443 ssl http2;
server_name example.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8080;
}
location ~* \.(?:css|js|png|jpe?g|gif|svg|ico)$ {
expires 7d;
access_log off;
}
}
Важно корректно прокидывать исходные заголовки и схему, чтобы приложения за Apache понимали, что клиент пришёл по HTTPS, и формировали абсолютные URL без лишних редиректов.
Миграция правил: htaccess → Nginx
Частый вопрос — перенос .htaccess
в конфиг Nginx. Базовые паттерны переписывания и каноникализации домена переносятся прямолинейно.
# .htaccess
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
# nginx
server {
listen 443 ssl http2;
server_name example.com;
# Каноникализация и принудительный HTTPS обычно делаются на 80-порте редиректом
# здесь приведена уже HTTPS-секция
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
Осторожность нужна с тонкими условиями RewriteCond
и флагами типа [QSA,NC,NE]
, обработкой кодировок и спецсимволов. Если у вас много доменных сценариев (301, HSTS, переезд), посмотрите разбор в материале Миграция домена: 301, HSTS и SSL.
Безопасность и харднинг
Оба сервера позволяют выставить строгие security‑заголовки (CSP, HSTS, X‑Frame‑Options, X‑Content‑Type‑Options), лимитировать размер запросов и тела (LimitRequestBody
vs client_max_body_size
), настраивать таймауты чтения/записи и защищаться от медленных клиентов. Apache традиционно силён благодаря mod_security
(с OWASP CRS), Nginx часто используют с внешними WAF или в связке с модулем‑коннектором. Подробную шпаргалку по заголовкам смотрите в статье HTTP security headers для Nginx и Apache.
Типичные ошибки харднинга в бою: забытые директивы для больших загрузок, отсутствие лимитов на количество соединений с одного IP, неочевидные редирект‑петли при проксировании HTTPS‑за‑HTTPS, и смешение доверенных и недоверенных сетей на одном слушателе без фильтрации.

Эксплуатация: обновления, перезагрузки и наблюдаемость
Nginx славится предсказуемым graceful‑reload: конфиг проверяется, старые воркеры плавно завершаются, новые поднимаются без разрыва подключений. Apache тоже поддерживает аккуратные перезапуски, но в сложных инсталляциях с множеством виртуальных хостов и динамических правил важно внимательно отслеживать влияние .htaccess
на кэш инструкций и файловые операции. В наблюдаемости Apache удобен своим mod_status
, Nginx — метриками через статус‑эндпоинт или экспортерами. В обоих случаях добавляйте логирование таймингов (например, upstream_response_time
), чтобы видеть вклад бэкенда.
Benchmarks: на что смотреть в отчётах
Слово benchmarks в контексте «nginx vs apache» часто перегружено маркетингом. Проверяйте: есть ли TLS и http2
; учитываются ли реальная RTT и пропускная способность канала; есть ли разделение тестов на «чистую статику», «прокси без бэкенда», «динамика через php-fpm
»; используются ли разные размеры объектов; продемонстрированы ли устойчивость к долгим соединениям и распределение латентности (p95/p99). Без этого сравнение цифр RPS мало что говорит о вашей продакшен‑нагрузке.
Ресурсная стоимость и предсказуемость
У Nginx обычно меньше накладной расход на соединение, он предсказуемо ведёт себя при взрывном росте конкурентных клиентов, что полезно при DDoS‑смежных всплесках, длинных загрузках или долгих http2
‑сессиях. Apache с mpm event
на современном Linux также ведёт себя достойно, но остаётся чувствительнее к включённым модулям и .htaccess
, которые могут тянуть дополнительные проверки на каждый запрос. Если у вас дюжина команд, регулярно меняющих правила на местах, этот оверхед может окупаться гибкостью; если всё централизовано и инфраструктура дисциплинирована — Nginx будет проще и быстрее.
Короткие рецепты выбора
- Нужны динамические правила на проекте через
.htaccess
без перезагрузки сервера — выбирайте Apache (mpm event
+php-fpm
), оптимизируйтеAllowOverride
точечно. - Фронт‑прокси, TLS‑терминация, статика, простые редиректы, балансировка — Nginx будет эффективнее и проще.
- Легаси‑проект на Apache, но хочется современный фронт и кэш — ставьте Nginx перед Apache, затем поэтапно выносите тяжёлые правила вверх.
- Высокая конкуренция соединений, много
http2
клиентов и тяжёлая статика — преимущество за Nginx; динамика на PHP упирается вphp-fpm
и базу. - На старте проще использовать виртуальный хостинг; для тонкого тюнинга, собственного бэкенда и высоких нагрузок берите VDS.
Итоги
В 2025 году «nginx vs apache» — это вопрос профиля нагрузки, требований к compatibility с .htaccess
, культуры конфигурирования и наблюдаемости. На чистой статике и фронтовом проксировании Nginx по‑прежнему фаворит в плане performance. Apache в конфигурации mpm event
+ http2
+ php-fpm
существенно сократил разрыв и остаётся лучшим выбором для проектов, где критична гибкость и модульность экосистемы, а также для команд, которым нужна динамическая настройка на уровне каталогов. Для большинства современных PHP‑проектов обе платформы дадут одинаково хорошие результаты при грамотном тюнинге пула php-fpm
, кэшей и TLS. Выбор стоит делать не из догмы, а из измерений — в ваших конкретных benchmarks и с вашим реальным трафиком.