LEMP — зв'язка Linux, Nginx (вимовляється «engine-x», звідси літера E), MySQL і PHP. На відміну від LAMP з Apache, Nginx обробляє статику і проксує динамічні запити в PHP-FPM окремим сокетом — це менше споживання пам'яті на багато одночасних з'єднань і вимагає явного налаштування мосту між Nginx і PHP.
Встановлення LEMP на Ubuntu 22.04
Порядок важливий лише формально — компоненти незалежні, але зручніше ставити вебсервер першим, щоб одразу бачити, що порт 80 відповідає.
1. Встановлення Nginx
apt update
apt install nginx -y
systemctl enable nginx
systemctl start nginx
# Перевірка: має відповісти заголовок Server: nginx
curl -I http://localhost
2. Встановлення MySQL
apt install mysql-server -y
mysql_secure_installation
Майстер mysql_secure_installation задає пароль root, вимикає анонімних користувачів, забороняє віддалений вхід під root і видаляє тестову базу — усі чотири кроки варто підтверджувати позитивно на продакшн-сервері.
3. Встановлення PHP
apt install php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip -y
# Перевірити, що демон FPM запущено і він слухає сокет
systemctl status php8.2-fpm
ls -l /run/php/php8.2-fpm.sock
Модулі підбираються під завдання: php8.2-mysql потрібен для підключення до бази, php8.2-mbstring — для коректної роботи з UTF-8 у CMS на кшталт WordPress, php8.2-gd — для обробки зображень. Перелік конкретних модулів для популярних застосунків зазвичай вказано в їхній документації.
4. Налаштування Nginx для PHP
Відредагуйте /etc/nginx/sites-available/default або створіть окремий конфіг для сайту:
server {
listen 80;
server_name yourdomain.com;
root /var/www/yourdomain.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
Директива fastcgi_pass вказує на unix-сокет PHP-FPM — той самий шлях, що показала команда ls із попереднього кроку. Якщо сокет називається інакше (наприклад, заданий TCP-порт 127.0.0.1:9000 у пулі FPM), потрібно вказати саме його.
5. Перезапустіть Nginx
nginx -t && systemctl reload nginx
Перевірка синтаксису командою nginx -t перед reload — не формальність: вона відрізняє помилку в конфігу від реальної проблеми після перезапуску, коли сайт раптом не відкривається.
Розбір типових помилок
502 Bad Gateway — Nginx прийняв запит, але не зміг отримати відповідь від PHP-FPM. Причини зазвичай дві: сокет із fastcgi_pass не збігається з реальним шляхом сокета FPM, або сам процес php8.2-fpm не запущено. Перевіряється командою systemctl status php8.2-fpm і логом /var/log/nginx/error.log, де буде рядок на кшталт connect() to unix:/run/php/php8.2-fpm.sock failed (2: No such file or directory).
Завантаження PHP-файлу замість його виконання у браузері означає, що блок location ~ \.php$ не спрацював — зазвичай через одруківку в регулярному виразі або відсутність fastcgi_params у підключених директивах.
Порівняння LEMP і LAMP
| Параметр | LEMP (Nginx) | LAMP (Apache) |
|---|---|---|
| Модель обробки запитів | Подієва, один процес на тисячі з'єднань | Процеси або потоки на з'єднання (mod_php) або через FPM |
| Пам'ять на багато з'єднань | Нижча за високої конкурентності | Вища за mod_php, порівнянна зі зв'язкою з FPM |
| .htaccess | Не підтримується, правила переносяться в конфіг сайту | Підтримується «з коробки» |
| Поріг входу | Вищий, потрібно явно налаштовувати зв'язку з PHP | Нижчий, mod_php працює одразу |
Коли LEMP не підходить
- Застосунок або його інструкція з хостингу жорстко покладається на
.htaccessдля перевизначення правил на рівні директорії — у Nginx такого механізму немає, усі правила централізовані в конфігу сайту. - На сервері вже працює панель керування, яка сама генерує конфігурацію Apache (наприклад, звична зв'язка з cPanel) — змішувати два вебсервери на одному порту без явного проксування не варто.
- Команда звикла налагоджувати через
.htaccessі не має доступу до перезавантаження Nginx (наприклад, на спільному хостингу) — LEMP передбачає контроль над конфігом сервера, а не лише над файлами сайту.
Перевірка результату
- Створіть тестовий файл
info.phpзі вмістом<?php phpinfo();у корені сайту і відкрийте його в браузері — має відобразитися сторінка конфігурації PHP, а не її вихідний код. - Видаліть
info.phpодразу після перевірки — ця сторінка розкриває версії ПЗ і шляхи на сервері, лишати її в продакшні не можна. - Перевірте підключення PHP до MySQL:
mysql -u root -p -e "SELECT VERSION();"і аналогічний запит через тестовий PHP-скрипт ізmysqliабо PDO. - Переконайтеся, що всі три сервіси піднімаються автоматично після перезавантаження:
systemctl is-enabled nginx mysql php8.2-fpmмає повернутиenabledдля кожного.
Подальше налаштування віртуального хоста, gzip і кешування статики розібрано в статті про налаштування Nginx для сайту на VDS, а прив'язка домену до TLS — у статті про встановлення SSL через Certbot.