LEMP-стек
Связка Linux, Nginx, MySQL и PHP для запуска веб-приложений — вариант классического LAMP, где Apache заменён на Nginx.
Что такое LEMP-стек
LEMP — набор из четырёх программ, на которых работает типовой сайт:
| Буква | Компонент | Роль |
|---|---|---|
| L | Linux | операционная система |
| E | Nginx | веб-сервер, принимает запросы |
| M | MySQL / MariaDB | база данных |
| P | PHP (реже Python, Perl) | язык приложения |
Буква E, а не N, потому что Nginx читается «engine x». Аббревиатура получилась кривоватой, но прижилась.
LEMP — не продукт, который скачивают одним файлом, а соглашение о том, из чего собран сервер. Аналогично устроены LAMP (с Apache), MEAN и прочие «стеки».
LEMP или LAMP
Разница ровно в одной букве — веб-сервер:
| LAMP (Apache) | LEMP (Nginx) | |
|---|---|---|
| Модель соединений | процесс или поток на клиента | событийный цикл |
| Память под нагрузкой | растёт с числом клиентов | почти не растёт |
| PHP | mod_php внутри процесса сервера |
отдельный php-fpm |
| Статика | медленнее | быстрее |
| Настройки на уровне папки | .htaccess, без root |
только основной конфиг |
| Готовые инструкции для CMS | их больше | их меньше |
LEMP выигрывает там, где много одновременных соединений и мало памяти — то есть на типовом VPS. LAMP удобнее на шаред-хостинге и в проектах, завязанных на .htaccess.
Отдельная деталь: в LEMP PHP работает не внутри веб-сервера, а самостоятельным демоном php-fpm (FastCGI Process Manager). Nginx не умеет исполнять PHP и не пытается — он передаёт запрос php-fpm по сокету и отдаёт клиенту готовый ответ. Пул воркеров php-fpm при этом настраивается независимо от веб-сервера.
Установка на Ubuntu
sudo apt update
sudo apt install -y nginx mariadb-server php-fpm php-mysql
sudo mysql_secure_installation # снять дефолтные настройки, задать пароль root
sudo systemctl enable --now nginx mariadb php8.3-fpm
Точное имя пакета php-fpm зависит от версии PHP в дистрибутиве — посмотрите apt search php-fpm.
Связка Nginx и php-fpm
server {
listen 80;
server_name example.ru;
root /var/www/example;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(env|git) {
deny all;
}
}
Три вещи, на которых спотыкаются:
try_files ... /index.php?$query_string— то, что в Apache делал.htaccessсmod_rewrite. Без этой строки красивые URL любой CMS отдают 404.- Права на сокет — Nginx работает от
www-data, php-fpm должен слушать сокет, доступный этому пользователю. Иначе502 Bad GatewayиPermission deniedвerror.log. - Явный запрет
.envи.git— в LAMP это часто было прописано в.htaccessиз коробки, в Nginx придётся написать самому. Открытый.envс паролем базы — классическая утечка.
Применять правки — только после проверки синтаксиса: sudo nginx -t && sudo systemctl reload nginx.
Что добавляют сверху
Голый LEMP на боевом сервере обычно дополняют:
- HTTPS — сертификат Let's Encrypt через certbot, он же пропишет редирект и продление
- Redis — кеш сессий и объектов, снимает нагрузку с базы
- Файрвол — открыты только 80, 443 и SSH
- Резервное копирование — дамп базы и файлов по расписанию
Альтернатива ручной сборке — Docker Compose: те же компоненты описываются одним файлом и не зависят от версий пакетов в дистрибутиве. Для нового проекта это чаще правильный выбор; ручной LEMP остаётся там, где сервер один и давно живой.
Связанные термины
- Nginx — буква E в аббревиатуре
- Apache — веб-сервер из LAMP, альтернатива Nginx
- MySQL / MariaDB — база данных стека
- Linux — фундамент всей связки
- Локальный / веб-сервер — как поднять тот же стек у себя
- VPS — типичное место обитания LEMP
Готовы запустить GPU-задачу?
Запустить GPU-сервер