Цель урока: Превратить наш сервер в полноценную платформу для динамических сайтов. Мы установим PHP и его ключевой компонент - PHP-FPM, а затем научим Nginx "понимать" файлы .php и отправлять их на обработку, создав полный LEMP-стек.

Часть 1: Теория. Как Nginx и PHP работают вместе?

Nginx - гений по работе со статикой (HTML, картинки), но он не умеет исполнять PHP-код. Для этого ему нужен помощник - интерпретатор PHP. Для серверов с Nginx используется PHP-FPM (PHP FastCGI Process Manager).

Схема работы:

  1. Nginx получает запрос на файл index.php.

  2. Nginx видит в своем конфиге правило для .php файлов и передает этот запрос в PHP-FPM по специальному быстрому протоколу FastCGI.

  3. PHP-FPM - это отдельная служба, которая берет файл, выполняет PHP-код (например, делает запрос к базе данных), и генерирует итоговую HTML-страницу.

  4. PHP-FPM возвращает этот готовый HTML обратно в Nginx.

  5. Nginx отдает страницу посетителю.

Ключевая идея: Nginx и PHP - это две разные, но тесно сотрудничающие программы.

Часть 2: Практика. Установка PHP-FPM и расширений

Шаг 1: Установка пакетов

Мы установим сам php-fpmphp-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.

  1. Добавить index.php в директиву index:
    Найдите строку index index.html ...; и добавьте index.php в самое начало.

    # Nginx будет искать index.php в первую очередь
    index index.php index.html index.htm;
  2. Изменить root (если необходимо):
    Убедитесь, что путь в директиве root соответствует вашему домену.

    # Путь должен быть консистентным
    root /var/www/your_domain.com/html;
  3. Добавить блок 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+OEnter) и выйдите (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

авторское право цифровые решения

Помог ли вам данный ответ? 0 Пользователи считают это полезным (0 голосов)