
Цель урока: Превратить наш сервер в полноценную платформу для динамических сайтов. Мы установим PHP и его ключевой компонент - PHP-FPM, а затем научим Nginx "понимать" файлы .php и отправлять их на обработку, создав полный LEMP-стек.
Часть 1: Теория. Как Nginx и PHP работают вместе?
Nginx - гений по работе со статикой (HTML, картинки), но он не умеет исполнять PHP-код. Для этого ему нужен помощник - интерпретатор PHP. Для серверов с Nginx используется PHP-FPM (PHP FastCGI Process Manager).
Схема работы:
-
Nginx получает запрос на файл index.php.
-
Nginx видит в своем конфиге правило для .php файлов и передает этот запрос в PHP-FPM по специальному быстрому протоколу FastCGI.
-
PHP-FPM - это отдельная служба, которая берет файл, выполняет PHP-код (например, делает запрос к базе данных), и генерирует итоговую HTML-страницу.
-
PHP-FPM возвращает этот готовый HTML обратно в Nginx.
-
Nginx отдает страницу посетителю.
Ключевая идея: Nginx и PHP - это две разные, но тесно сотрудничающие программы.
Часть 2: Практика. Установка PHP-FPM и расширений
Шаг 1: Установка пакетов
Мы установим сам php-fpm, php-cli (интерпретатор командной строки, полезен для отладки и запуска скриптов) и набор самых популярных расширений для CMS типа WordPress.
apt update
# Устанавливаем php-cli, php-fpm, модуль для MySQL и другие полезные модули
apt install -y php-cli php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-soap php-intl php-zip
Важное примечание: Пакет php-xmlrpc устарел и удален из современных версий PHP, поэтому мы его не устанавливаем.
Шаг 2: Проверка версии и статуса
Теперь, когда у нас есть php-cli, мы можем безопасно проверить версию.
php -v
Допустим, вы увидели PHP 8.1.2. Значит, имя службы будет php8.1-fpm.

Проверим ее статус:
systemctl status php8.1-fpm
Вы должны увидеть Active: active (running).

Часть 3: Практика. Настройка Nginx для работы с PHP
Теперь "научим" Nginx отправлять .php файлы в PHP-FPM. Мы будем редактировать конфигурационный файл нашего сайта, который мы создали в Уроке 46.
Шаг 1: Открываем конфиг сайта
Важно: Мы будем использовать тот же домен и пути, что и в уроке про SSL, чтобы сохранить логическую последовательность.
# Используйте имя вашего домена
nano /etc/nginx/sites-available/your_domain.com
Шаг 2: Вносим изменения
Найдите блок server { ... } для порта 80 (который делает редирект) и блок для порта 443 (основной). Все изменения мы будем вносить в блок server для порта 443.
-
Добавить index.php в директиву index:
Найдите строку index index.html ...; и добавьте index.php в самое начало.# Nginx будет искать index.php в первую очередь index index.php index.html index.htm; -
Изменить root (если необходимо):
Убедитесь, что путь в директиве root соответствует вашему домену.# Путь должен быть консистентным root /var/www/your_domain.com/html; -
Добавить блок location для обработки .php файлов:
Вставьте этот блок внутри блока server { listen 443 ssl; ... }, например, после location / { ... }.# Этот блок ловит все запросы к файлам, заканчивающимся на .php location ~ \.php$ { include snippets/fastcgi-php.conf; # Указываем Nginx, куда отправлять запросы. # ВАЖНО: Проверьте версию PHP в пути! (php8.1-fpm.sock) fastcgi_pass unix:/run/php/php8.1-fpm.sock; }
Внимание: Путь к сокету /run/php/php8.1-fpm.sock должен точно соответствовать установленной у вас версии PHP. Проверить реальный путь можно командой ls /run/php/.
Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X).
Шаг 3: Проверка и перезагрузка Nginx
Всегда проверяем синтаксис!
nginx -t
Если syntax is ok и test is successful:
systemctl reload nginx
Часть 4: Практика. Финальный тест. "Hello World" на PHP
Шаг 1: Создаем тестовый каталог и файл
Убедимся, что каталог для нашего сайта существует и создадим в нем тестовый PHP-скрипт.
# Создаем каталог, ключ -p не выдаст ошибку, если он уже есть
mkdir -p /var/www/your_domain.com/html
# Создаем файл info.php в корне нашего сайта
nano /var/www/your_domain.com/html/info.php
Вставьте в него следующий код. Функция phpinfo() выводит подробную информацию о настройках PHP.
<?php
phpinfo();
?>
Сохраните и закройте.
Шаг 2: Открываем в браузере
Перейдите по адресу https://your_domain.com/info.php.
Что вы должны увидеть:
-
Успех: Большая фиолетово-серая таблица с логотипом PHP и массой информации. Это значит, вся цепочка (Браузер -> Nginx -> PHP-FPM -> Nginx -> Браузер) работает.
-
Провал 1 (Скачивается файл или виден код): Nginx не настроен на обработку PHP. Проверьте ваш конфиг, особенно блок location ~ \.php$, и перезагрузите Nginx.
-
Провал 2 (502 Bad Gateway): Nginx не может связаться с PHP-FPM. Проверьте, что служба PHP-FPM запущена (systemctl status phpX.X-fpm) и что путь к сокету в конфиге Nginx указан верно.
Шаг 3: Удаление тестового файла (Безопасность!)
Файл phpinfo() раскрывает много информации о вашем сервере. После успешного теста немедленно удалите его.
rm /var/www/your_domain.com/html/info.php
Часть 5: Заключение
Поздравляю! Вы только что собрали полный стек технологий, известный как LEMP (Linux, Nginx, MySQL/MariaDB, PHP). Теперь ваш сервер полностью готов к размещению любых современных динамических сайтов и CMS.
Вы научились:
-
Понимать принцип взаимодействия Nginx и PHP-FPM.
-
Устанавливать PHP-FPM и необходимые расширения.
-
Правильно настраивать Nginx для обработки PHP-скриптов.
-
Тестировать работу PHP и проводить базовую диагностику ошибок.
На следующем, 52-м уроке, мы проведем большой итоговый практикум этого блока. Мы возьмем все, чему научились (Nginx, виртуальные хосты, SSL, базу данных, PHP), и развернем с нуля самую популярную в мире CMS - WordPress. Это будет реальная боевая задача.
Перейти к просмотру - УРОК №52.
Промо-код: PROMO15 - скидка 15%!
Введите при оформлении первого заказа на сайте: Hosting-VDS.com

