В чем разница между веб-серверами Nginx и Apache?

«В чем разница между веб-серверами Nginx и Apache?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основные различия лежат в архитектуре обработки соединений, что влияет на производительность и сценарии использования.

Аспект Apache Nginx
Архитектура Процессно- или потоково-ориентированная (MPM: prefork, worker, event). Каждое соединение обрабатывается отдельным процессом/потоком. Асинхронная, событийно-ориентированная. Один рабочий процесс эффективно обрабатывает тысячи соединений в неблокирующем режиме.
Обработка статики Менее эффективна при высоких нагрузках, так как каждый запрос к файлу занимает процесс/поток. Крайне эффективен, так как статические файлы отдаются без создания отдельного потока на запрос.
Обработка динамики Традиционно интегрируется с PHP через модуль mod_php (Apache запускает интерпретатор в своём процессе). Работает как прокси-сервер, передавая динамические запросы внешнему процессу (например, PHP-FPM) через FastCGI.
Конфигурация Гибкая, поддерживает распределённые конфиги .htaccess. Централизованная, синтаксис лаконичнее, .htaccess не поддерживается, что даёт прирост производительности.

Пример конфигурации Nginx для PHP (FastCGI):

server {
    location ~ .php$ {
        fastcgi_pass   unix:/run/php/php8.2-fpm.sock;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Выбор на практике:

  • Nginx часто выбирают для высоконагруженных проектов, в качестве фронтенд-прокси или балансировщика нагрузки.
  • Apache может быть удобнее для shared-хостинга (из-за .htaccess) или при использовании специфичных модулей (например, mod_rewrite с более простым синтаксисом).
  • Гибридная схема также распространена: Nginx принимает запросы, отдаёт статику и проксирует динамические запросы на Apache на бэкенде.