- Home »

Что такое LEMP — стек Linux, Nginx, MySQL, PHP
Если ты когда-нибудь деплоил веб-приложение на Linux-сервер, то наверняка сталкивался с выбором веб-стека. LEMP (Linux, Nginx, MySQL, PHP) — это одна из самых популярных связок для хостинга динамических сайтов. В отличие от старого доброго LAMP, где Apache занимает место веб-сервера, LEMP использует более современный и производительный Nginx (Engine-X, отсюда и буква E в аббревиатуре).
Эта статья покажет, как правильно настроить LEMP-стек с нуля, избежать типичных граблей и получить стабильно работающий сервер. Мы разберем архитектуру, пройдем весь процесс установки и настройки, а также рассмотрим практические кейсы и оптимизации.
Что такое LEMP и как это работает
LEMP — это акроним из четырех компонентов:
- L — Linux (операционная система)
- E — Nginx (веб-сервер, произносится Engine-X)
- M — MySQL/MariaDB (система управления базами данных)
- P — PHP (язык программирования)
Архитектура работает следующим образом: Nginx принимает HTTP-запросы от клиентов, обрабатывает статические файлы напрямую, а динамические запросы передает через FastCGI интерфейс PHP-FPM процессам. PHP-скрипты взаимодействуют с MySQL для работы с данными.
Главное преимущество LEMP перед LAMP — это производительность Nginx при обработке большого количества одновременных соединений благодаря асинхронной архитектуре. Apache использует модель “один процесс/поток на соединение”, что может привести к исчерпанию ресурсов под нагрузкой.
Пошаговая установка LEMP на Ubuntu/Debian
Для практики нам понадобится чистый VPS-сервер с Ubuntu 22.04 или новее. Если нужна серьезная производительность, рассмотрите выделенный сервер.
Шаг 1: Обновление системы
sudo apt update && sudo apt upgrade -y
sudo apt install curl wget gnupg2 software-properties-common -y
Шаг 2: Установка Nginx
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
Проверяем работу — открываем IP-адрес сервера в браузере. Должна появиться страница “Welcome to nginx!”.
Шаг 3: Установка MySQL
sudo apt install mysql-server -y
sudo systemctl start mysql
sudo systemctl enable mysql
sudo mysql_secure_installation
Скрипт `mysql_secure_installation` спросит несколько вопросов:
- Установить validate password plugin? — Y (рекомендуется)
- Удалить анонимных пользователей? — Y
- Запретить root-логин удаленно? — Y
- Удалить тестовую базу? — Y
- Перезагрузить таблицы привилегий? — Y
Шаг 4: Установка PHP
sudo apt install php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip php8.1-intl php8.1-bcmath -y
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm
Шаг 5: Настройка Nginx для работы с PHP
Создаем конфигурацию виртуального хоста:
sudo nano /etc/nginx/sites-available/default
Заменяем содержимое на:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Проверяем конфигурацию и перезапускаем Nginx:
sudo nginx -t
sudo systemctl reload nginx
Шаг 6: Тестирование PHP
Создаем тестовый PHP-файл:
sudo nano /var/www/html/info.php
Вставляем код:
<?php
phpinfo();
?>
Открываем в браузере `http://your-server-ip/info.php` — должна появиться страница с информацией о PHP.
Сравнение LEMP с другими веб-стеками
Характеристика | LEMP | LAMP | MEAN |
---|---|---|---|
Веб-сервер | Nginx | Apache | Express.js |
Потребление RAM | Низкое | Среднее | Среднее |
Обработка статики | Отлично | Хорошо | Хорошо |
Конкурентность | Высокая | Средняя | Высокая |
Простота настройки | Средняя | Высокая | Низкая |
Скорость разработки | Высокая | Высокая | Средняя |
Оптимизация и тонкая настройка
Настройка Nginx для производительности
Редактируем основной конфиг:
sudo nano /etc/nginx/nginx.conf
Важные параметры для оптимизации:
worker_processes auto;
worker_connections 1024;
keepalive_timeout 65;
client_max_body_size 64M;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Настройка PHP-FPM
sudo nano /etc/php/8.1/fpm/pool.d/www.conf
Ключевые параметры:
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
Оптимизация MySQL
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Добавляем в секцию [mysqld]:
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
query_cache_size = 16M
query_cache_type = 1
max_connections = 100
Практические кейсы и решение проблем
Проблема: 502 Bad Gateway
Частая ошибка при неправильной настройке PHP-FPM. Проверяем:
sudo systemctl status php8.1-fpm
sudo tail -f /var/log/nginx/error.log
Обычно помогает перезапуск PHP-FPM:
sudo systemctl restart php8.1-fpm
Проблема: Медленная загрузка сайта
Включаем кэширование статики в Nginx:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
Настройка SSL/TLS с Let’s Encrypt
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
sudo systemctl reload nginx
Автоматизация и скрипты
Создаем скрипт для автоматической установки LEMP:
#!/bin/bash
# lemp-install.sh
echo "Installing LEMP stack..."
# Update system
apt update && apt upgrade -y
# Install Nginx
apt install nginx -y
systemctl start nginx
systemctl enable nginx
# Install MySQL
apt install mysql-server -y
systemctl start mysql
systemctl enable mysql
# Install PHP
apt install php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip -y
systemctl start php8.1-fpm
systemctl enable php8.1-fpm
# Configure Nginx for PHP
cat > /etc/nginx/sites-available/default << 'EOF'
server {
listen 80 default_server;
root /var/www/html;
index index.php index.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
EOF
# Test and reload Nginx
nginx -t && systemctl reload nginx
echo "LEMP stack installed successfully!"
Запускаем скрипт:
chmod +x lemp-install.sh
sudo ./lemp-install.sh
Альтернативные решения
Существуют и другие варианты веб-стеков:
- LNMP — то же самое, что LEMP, просто другая транскрипция
- LAMP — классический стек с Apache вместо Nginx
- LEPP — LEMP с PostgreSQL вместо MySQL
- Docker-based стеки — контейнеризованные решения
Полезные ссылки для изучения:
Интересные факты и нестандартные применения
Nginx изначально создавался для решения проблемы C10K (обработка 10 000 одновременных соединений). Его архитектура основана на event-driven модели, что позволяет одному worker-процессу обрабатывать тысячи соединений.
Нестандартные способы использования LEMP:
- Микросервисы — Nginx как API Gateway с балансировкой нагрузки
- Обработка изображений — модуль nginx-image-filter для ресайза на лету
- Кэширование — встроенный proxy_cache для ускорения динамических страниц
- WebSocket-прокси — проксирование WebSocket-соединений к Node.js backend
Пример настройки кэширования:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_pass http://backend;
}
}
Мониторинг и логирование
Настройка структурированного логирования для анализа:
log_format json_combined escape=json
'{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"status": "$status",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"http_referrer":"$http_referer",'
'"http_user_agent":"$http_user_agent"'
'}';
access_log /var/log/nginx/access.log json_combined;
Мониторинг PHP-FPM:
location ~ ^/(status|ping)$ {
access_log off;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Заключение и рекомендации
LEMP-стек — это отличный выбор для большинства веб-проектов, особенно когда важна производительность и масштабируемость. Nginx показывает себя лучше Apache при высоких нагрузках, а PHP-FPM обеспечивает стабильную работу PHP-приложений.
Когда использовать LEMP:
- Высоконагруженные сайты с большим количеством одновременных пользователей
- Проекты, где критично время отклика
- Приложения с активным использованием AJAX и API
- Сайты с большим объемом статического контента
Когда лучше выбрать LAMP:
- Простые сайты с небольшой нагрузкой
- Проекты, где нужна максимальная совместимость с .htaccess
- Команда не имеет опыта работы с Nginx
Помните: правильная настройка и оптимизация важнее выбора конкретного стека. Регулярно обновляйте компоненты, следите за логами и не забывайте про бэкапы. Удачи в деплое!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.