В чем разница между стеком LAMP и стеком LEMP?

«В чем разница между стеком LAMP и стеком LEMP?» — вопрос из категории Веб-серверы и балансировка, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оба стека используются для развертывания веб-приложений (чаще всего на PHP) в среде Linux. Ключевое различие — используемый веб-сервер.

LAMP

  • Linux, Apache, MySQL/MariaDB, PHP/Python/Perl.
  • Веб-сервер: Apache HTTP Server.
  • Архитектура: Многопоточная, процессно-ориентированная (MPM prefork/worker). Каждое соединение, как правило, обслуживается отдельным процессом или потоком.
  • Преимущества:
    • Огромное количество модулей (.so), расширяющих функциональность.
    • Гибкая конфигурация через .htaccess на уровне директорий.
    • Простая интеграция с PHP через модуль mod_php.
  • Недостатки: Менее эффективен при очень высоких нагрузках с большим количеством одновременных соединений из-за накладных расходов на процессы/потоки.

LEMP

  • Linux, Nginx (произносится "Engine-X", отсюда E), MySQL/MariaDB, PHP/Python/Perl.
  • Веб-сервер: Nginx.
  • Архитектура: Асинхронная, событийно-ориентированная. Один мастер-процесс управляет несколькими рабочими процессами, которые могут обрабатывать тысячи соединений в неблокирующем режиме.
  • Преимущества:
    • Высокая производительность и низкое потребление памяти при работе со статическим контентом и множеством одновременных соединений.
    • Часто используется как reverse proxy и load balancer перед Apache или application-серверами.
    • Более простой и понятный синтаксис конфигурационных файлов.
  • Особенность: Nginx не исполняет PHP-код напрямую. Он передает запросы к PHP-скриптам отдельному процессу-обработчику (обычно PHP-FPM — FastCGI Process Manager) через протокол FastCGI.

Пример базовой конфигурации Nginx для PHP (LEMP):

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ .php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # Связь с PHP-FPM
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Выбор: LAMP традиционен и удобен для shared-хостинга. LEMP предпочтительнее для высоконагруженных проектов и современных микросервисных архитектур, где Nginx выступает в роли шлюза.