LEMP против LAMP: что выгоднее и когда
Спор «LEMP или LAMP» обычно заканчивается фразой «nginx быстрее» — и это правда наполовину. На статике разрыв трёхкратный, на генерации страницы WordPress — в пределах погрешности, а настоящая разница спрятана в памяти и в одном файле, которого у nginx нет принципиально. Ниже — замеры на одинаковом сервере, арифметика воркеров, дословные ошибки обоих стеков и правила выбора.
Содержание
- Короткий ответ: LEMP или LAMP и в чём разница на самом деле
- Замеры на одном железе: статика, динамика, память
- Память — вот где LAMP реально стоит денег
- `.htaccess`: единственное, чего в LEMP нет и за что вы платите
- Третий вариант: Apache на mpm_event и связка nginx + Apache
- Что выбрать под конкретный проект
- Какой сервер под LEMP или LAMP взять в MAATRIX
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Короткий ответ: LEMP или LAMP и в чём разница на самом деле
Оба набора — это Linux, веб-сервер, MySQL или MariaDB и PHP; различается буква E (Engine X, то есть nginx) против A (Apache). Сравнивать веб-серверы в лоб бессмысленно: вместе с буквой меняется способ исполнения PHP, а он и решает всё под нагрузкой.
- Классический LAMP — Apache с
mod_php: интерпретатор живёт внутри каждого процесса, и одно соединение означает полноценный PHP в памяти, даже если клиент качает картинку. - LEMP — nginx плюс демон
php8.3-fpmсо своим пулом: nginx держит соединения и зовёт PHP только за файлами.php.
Отсюда правило: Apache на mpm_event с PHP-FPM — это уже почти LEMP по всем цифрам, кроме статики. Проверьте, что у вас:
apache2ctl -V | grep 'Server MPM' # Server MPM: prefork ← классический LAMP
apache2ctl -M | grep -E 'php|proxy_fcgi'
php8_module в списке — интерпретатор внутри Apache; proxy_fcgi_module без php — вы уже на гибриде.
Короткий вердикт. LEMP выгоднее, когда сайт ваш, сервер небольшой (1–4 ГБ), много статики или планируется кеш. LAMP выгоднее с чужим кодом и готовым .htaccess и на хостинге для нескольких клиентов.
Замеры на одном железе: статика, динамика, память
Стенд: VPS 2 vCPU, 4 ГБ RAM, NVMe, Ubuntu 24.04 LTS. Из штатных репозиториев — nginx 1.24.0, Apache 2.4.58, PHP 8.3 с OPcache, MariaDB 10.11. Сайт один и тот же: WordPress с базовой темой, без кеширующих плагинов. Нагрузку подаём с соседнего сервера в том же ЦОД:
wrk -t2 -c100 -d30s http://10.0.0.5/wp-includes/css/dashicons.min.css # 4 КБ статики
wrk -t2 -c20 -d60s http://10.0.0.5/ # главная, кеша нет
Файл маленький намеренно: на 48-килобайтной картинке все три конфигурации упёрлись бы в гигабитный порт (14 200 запросов по 4 КБ — уже 470 Мбит/с).
| Показатель | nginx + PHP-FPM | Apache event + PHP-FPM | Apache prefork + mod_php |
|---|---|---|---|
| Статика, RPS (100 соединений) | 14 200 | 9 800 | 3 900 |
| Статика, задержка p99 | 12 мс | 27 мс | 244 мс |
| Главная WordPress, RPS | 78 | 75 | 71 |
| Динамика, задержка p95 | 258 мс | 267 мс | 283 мс |
| Веб-сервер + PHP в простое | 95 МБ | 120 МБ | 190 МБ |
| Веб-сервер + PHP на пике | 720 МБ | 780 МБ | 2,7 ГБ |
MariaDB во всех трёх случаях съедала 380 МБ и в таблицу не попала.
Выводы. На динамике разница 9 % и она не про веб-сервер: 250 миллисекунд из 260 тратит PHP. На статике разрыв настоящий — три с половиной раза к prefork. По памяти mod_php дороже вчетверо, и вот это, а не RPS, вы оплачиваете тарифом.
Со страничным кешем сайт превращается в раздачу готового HTML — то есть в первую строку таблицы, где разрыв максимальный. Отсюда выигрыш связки «nginx + кеш» на слабых серверах; подробности — в разборе ускорения WordPress на слабом VPS.
Развернуть за пару минут
Готовый образ на VPS MAATRIX: NVMe, AMD EPYC, root-доступ. Локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Развернуть WordPressПамять — вот где LAMP реально стоит денег
Сколько весит один процесс Apache с загруженным WordPress:
ps -ylC apache2 --sort:rss | awk 'NR>1{s+=$8;n++} END{printf "%d процессов, в среднем %.0f МБ\n", n, s/n/1024}'
На стенде вышло 58 процессов, в среднем 46 МБ. Та же команда для nginx даёт два воркера по 18 МБ — хоть сто клиентов на сайте, хоть пять тысяч.
Теперь ловушка, на которую наступают все. В /etc/apache2/mods-available/mpm_prefork.conf из коробки стоит MaxRequestWorkers 150: 150 × 46 МБ = 6,9 ГБ на сервере, где всего 4. Машина уходит в своп, а дальше в dmesg появляется классика:
Out of memory: Killed process 1187 (mariadbd) total-vm:2419016kB, anon-rss:389204kB
База умирает первой, и посетители видят Error establishing a database connection: сайт «упал без причины», хотя Apache жив.
Правильное число: (RAM − база − система − запас) / размер воркера. Для 4 ГБ это (4096 − 700 − 400 − 300) / 46 ≈ 58. Ставим 58 — и получаем второй симптом, уже честный:
[mpm_prefork:error] [pid 921] AH00161: server reached MaxRequestWorkers setting,
consider raising the MaxRequestWorkers setting
Совет из самой ошибки плохой: поднять лимит — вернуться к OOM. Лечится кешем перед PHP, переходом на FPM или памятью.
В LEMP этой арифметики нет по конструкции: соединения держит nginx (пятьсот keep-alive стоят ему меньше мегабайта), а число PHP-процессов ограничено pm.max_children и от соединений не зависит. Лишние запросы встают в очередь к сокету — вы получаете замедление вместо смерти сервера. В переводе на тариф: сотня одновременных посетителей на mod_php требует 8 ГБ там, где LEMP обходится двумя.
`.htaccess`: единственное, чего в LEMP нет и за что вы платите
Главный аргумент за Apache, который не закрывается настройкой: каталоговые конфиги меняют правила без перезапуска сервера, и на хостинге для клиентов без этого никак. Цена известна: при AllowOverride All Apache проверяет .htaccess в каждом каталоге пути на каждый запрос. В strace одна картинка выглядит так:
openat(AT_FDCWD, "/var/www/html/.htaccess", O_RDONLY|O_CLOEXEC) = 12
openat(AT_FDCWD, "/var/www/html/wp-content/uploads/.htaccess", O_RDONLY|O_CLOEXEC) = -1 ENOENT
Переключение стенда с AllowOverride All на AllowOverride None подняло статику с 3 900 до 4 750 RPS — плюс 18 % бесплатно: правила переезжают в <Directory> основного конфига.
Обратная сторона: на nginx плагины, которые «сами всё настраивают», молча перестают работать — Wordfence и Really Simple SSL пишут строки в .htaccess и не ругаются, а читать его некому. Типовые правила переводятся так:
| Задача | Apache, .htaccess | nginx, серверный блок |
|---|---|---|
| ЧПУ WordPress | RewriteRule . /index.php [L] | try_files $uri $uri/ /index.php?$args; |
Закрыть wp-config.php | <Files wp-config.php> Require all denied </Files> | location = /wp-config.php { deny all; } |
| Редирект на HTTPS | RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] | return 301 https://$host$request_uri; |
Двадцать строк переводятся за четверть часа. Триста строк накопленных за десять лет RewriteCond — рабочий день плюс регрессии через неделю. Признак потери: главная открывается, а внутренние страницы отдают 404 — не перенесли try_files. Второй — 413 Request Entity Too Large при загрузке: лимит есть в PHP, но забыт client_max_body_size.
Третий вариант: Apache на mpm_event и связка nginx + Apache
Между «переписать всё» и «терпеть prefork» есть два рабочих решения.
Apache с mpm_event и PHP-FPM. Забирает у LAMP главный недостаток — память — и оставляет .htaccess:
apt -y install php8.3-fpm
a2dismod php8.3 mpm_prefork
a2enmod mpm_event proxy_fcgi setenvif http2
a2enconf php8.3-fpm
systemctl restart apache2 && apache2ctl -V | grep 'Server MPM'
Порядок важен: пока mod_php включён, a2enmod mpm_event откажется работать, а если поднять их вместе, Apache напишет в error.log:
[core:warn] AH00117: Apache is running a threaded MPM, but your PHP Module is not
compiled to be threadsafe. You need to recompile PHP.
Работать это будет до первого падения под нагрузкой. После a2enconf php8.3-fpm запросы уходят в сокет FPM — за это отвечает готовый конфиг с директивой SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost". Дальше тюнинг под 4 ГБ: ThreadsPerChild 25, MaxRequestWorkers 150, MaxConnectionsPerChild 10000. Здесь 150 — потоки, а не процессы по 46 МБ, и в память они помещаются.
nginx впереди, Apache позади. Схема, которую по умолчанию собирают панели ISPmanager, FASTPANEL и aaPanel: статику и SSL держит nginx, PHP и .htaccess остаются на Apache. Плата — два веб-сервера в памяти (+120–180 МБ) и настройка реального IP: Apache переводится на Listen 127.0.0.1:8080, а адрес клиента приезжает через mod_remoteip с RemoteIPHeader X-Forwarded-For и RemoteIPInternalProxy 127.0.0.1. Без этого в логах сплошной 127.0.0.1: fail2ban банит локалхост, а WordPress показывает один IP у всех комментаторов. Появятся 502-е — смотрите разбор ошибки 502 Bad Gateway в nginx.
Два честных факта 2026 года в пользу разных сторон. HTTP/3 у Apache 2.4 нет; nginx умеет QUIC с 1.25 (listen 443 quic reuseport; и http3 on;), но в Ubuntu 24.04 лежит 1.24 — нужен репозиторий mainline. И наоборот: ModSecurity с правилами OWASP CRS на Apache ставится пакетами libapache2-mod-security2 и modsecurity-crs, а для nginx готового модуля в репозиториях нет.
Что выбрать под конкретный проект
- Новый сайт на WordPress, сервер 2 ГБ — LEMP, без вариантов; пошаговая сборка с конфигами разобрана в статье WordPress на LEMP.
- Магазин на WooCommerce — LEMP плюс Redis: корзина и оформление заказа не кешируются в принципе, а память, сэкономленная на веб-сервере, уходит в пул FPM, где нужнее.
- 1С-Битрикс — гибрид nginx + Apache: штатное окружение устроено именно так, часть модулей рассчитывает на каталоговые правила, и воевать с этим ради 5 % смысла нет.
- Самописное приложение или старая CMS с длинным
.htaccess— оставайтесь на Apache, но наmpm_eventс FPM: почти весь выигрыш по памяти и ноль риска сломать правила. - Хостинг для нескольких клиентов — Apache с
AllowOverride Allна каждый vhost или панель с гибридом: изоляция важнее RPS. - Laravel, Symfony, API, вебсокеты и раздача медиа — LEMP. Там
.htaccessдекоративный, аtry_filesделает то же дешевле.
Про «выгоднее» в деньгах. Софт бесплатен в обоих случаях, платите вы за память и за часы. Переезд на LEMP окупается, если снимает шаг тарифа: 2 ГБ вместо 4 ГБ экономят в месяц примерно столько же, сколько стоит день работы инженера. Если перевод правил займёт неделю с регрессиями в оформлении заказа, дешевле доплатить за память и остаться на Apache.
Чеклист после переезда: открываются внутренние страницы, а не только главная; файл больше 8 МБ загружается; в логах виден реальный IP; nginx -t и apache2ctl configtest молчат.
Какой сервер под LEMP или LAMP взять в MAATRIX
Минимум: 1 vCPU, 2 ГБ RAM, 25 ГБ NVMe. Под LEMP: nginx, 6–8 воркеров PHP-FPM, MariaDB и запас; сайт с посещаемостью до 800 визитов в сутки живёт здесь спокойно. Честное ограничение: LAMP с mod_php на 2 ГБ брать не стоит — по формуле выше вам достанется 28 воркеров, и первый всплеск закончится тем самым AH00161 или OOM. Redis сюда тоже не помещается.
Комфортный вариант: 2 vCPU, 4 ГБ RAM, 60–80 ГБ NVMe. На LEMP помещаются Redis, FastCGI-кеш, ночной mysqldump и копия сайта под тесты. Это же минимум для гибрида nginx + Apache. Для Битрикса с живым трафиком или магазина от 5000 позиций закладывайте 4 vCPU и 8 ГБ — узкое место там не веб-сервер, а PHP и база.
Локация — Великобритания, Лондон. До Москвы 40–50 мс, до Петербурга 35–45, до Берлина и Амстердама 10–20 мс: аудитория в ЕС получает сайт мгновенно, российские посетители не замечают разницы на фоне 250 мс генерации. Оговорка прямая: если сайт собирает персональные данные граждан России — а форма заявки с телефоном это уже они, — 152-ФЗ требует держать первичную базу в РФ, и тогда сервер берите в российской локации. Подробнее — в обзоре лучших VPS для WordPress в Великобритании.
Команды из этой статьи нужны, когда вы собираете стек руками. При заказе в MAATRIX это не требуется: WordPress есть в каталоге apps.maatrix.io и ставится на сервер автоматически при оформлении — вместе с nginx, PHP-FPM и базой, то есть сразу на LEMP-связке. Автоустановка работает на Ubuntu и Debian, а адрес сайта, логин и пароль администратора появляются в личном кабинете, в разделе «Доступ». Нужен Apache под чужой код — берите чистый образ и переводите его на mpm_event с FPM. Оплата — картой российского банка, по СБП, криптовалютой или токеном MAAT.
Развернуть за пару минут
Готовый образ на VPS MAATRIX: NVMe, AMD EPYC, root-доступ. Локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Развернуть WordPressОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Что быстрее — LEMP или LAMP?
На статике и под кешем nginx быстрее в 1,5–3,5 раза, на генерации страницы WordPress разница около 9 % и теряется в шуме. Главный выигрыш LEMP не в скорости, а в памяти: 720 МБ против 2,7 ГБ.
Можно ли перенести сайт с LAMP на LEMP без переписывания?
Код PHP не меняется, меняются только правила из .htaccess — ЧПУ, редиректы, запреты доступа: для WordPress это десять строк, для старой самописки — рабочий день. Вариант без переписывания — оставить Apache, но перевести его на mpm_event с PHP-FPM.
Apache совсем устарел?
Нет. Он проигрывает на статике и в памяти с mod_php, но даёт .htaccess, простую установку ModSecurity и совместимость с чужим кодом. На mpm_event с FPM он отстаёт от nginx на единицы процентов — этого хватает почти любому проекту.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.