← Назад к вопросам

Как подключить PHP приложение к Nginx

1.8 Middle🔥 112 комментариев
#Linux и администрирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Подключение PHP приложения к Nginx

Подключение PHP приложения к веб-серверу Nginx — фундаментальная задача для DevOps и системных администраторов. Nginx не исполняет PHP самостоятельно, поэтому для обработки PHP-скриптов требуется использование PHP-FPM (FastCGI Process Manager). Это современный и высокопроизводительный способ интеграции.

Основные шаги подключения

Процесс состоит из установки необходимых компонентов, настройки Nginx и PHP-FPM, а затем проверки работы.

1. Установка PHP-FPM и необходимых модулей

# Для системы на базе Ubuntu/Debian
sudo apt update
sudo apt install nginx php-fpm php-cli php-mysql php-curl php-gd php-xml

# Для системы на базе CentOS/RHEL
sudo yum install epel-release
sudo yum install nginx php-fpm php-cli php-mysqlnd php-curl php-gd php-xml

После установки убедитесь, что служба php-fpm запущена и включена.

sudo systemctl start php-fpm
sudo systemctl enable php-fpm
sudo systemctl status php-fpm

2. Настройка пула PHP-FPM

Конфигурационные файлы PHP-FPM обычно находятся в /etc/php/{версия}/fpm/pool.d/. Основной пул называется www.conf. Ключевые параметры для настройки:

  • listen: Определяет, как PHP-FPM будет принимать соединения. Чаще используется сокет (unix:/run/php/php8.1-fpm.sock) или TCP-порт (127.0.0.1:9000). Сокет обычно более эффективен.
  • user и group: Пользователь и группа, под которыми будут запускаться процессы PHP. Их важно согласовать с правами файлов приложения и пользователем Nginx (обычно nginx или www-data).

Пример важной части конфигурации пула:

[www]
user = www-data
group = www-data
listen = /run/php/php8.1-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

3. Конфигурация Nginx для обработки PHP

В конфигурации сайта (/etc/nginx/sites-available/myapp или в основном nginx.conf) необходимо добавить блок location для обработки PHP-файлов, который будет передавать их PHP-FPM через FastCGI протокол.

server {
    listen 80;
    server_name myapp.example.com;
    root /var/www/myapp/public;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Обработка PHP файлов
    location ~ \.php$ {
        include snippets/fastcgi-php.conf; # В Debian/Ubuntu часто есть этот удобный файл

        # Альтернативно, можно указать параметры напрямую:
        # fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        # fastcgi_index index.php;
        # fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        # include fastcgi_params;

        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Запрет доступа к скрытым файлам (например, .env)
    location ~ /\. {
        deny all;
    }
}

Ключевой директивой здесь является fastcgi_pass, которая указывает Nginx адрес PHP-FPM (сокет или TCP).

4. Проверка конфигурации и перезапуск сервисов

Проверьте конфигурацию Nginx на ошибки и затем перезапустите сервисы:

sudo nginx -t
sudo systemctl reload nginx
sudo systemctl restart php-fpm

Критические моменты и рекомендации

  • Безопасность: Убедитесь, что PHP-FPM сокет имеет правильные права (listen.owner, listen.group), чтобы только Nginx мог подключиться к ним.
  • Правильные пути root и SCRIPT_FILENAME: Ошибки в $realpath_root или $fastcgi_script_name — самая частая причина проблемы "File not found". Использование $realpath_root помогает избежать проблем с симлинками.
  • Оптимизация пула PHP-FPM: Настройка режима управления процессами (pm), количества детей (max_children) напрямую влияет на производительность и потребление памяти под нагрузкой.
  • Логирование: Включите логирование ошибок PHP и Nginx для диагностики (error_log в Nginx и php_admin_value[error_log] в пуле FPM).
  • Статика: Nginx должен обслуживать статические файлы (изображения, CSS, JS) напрямую, без передачи в PHP-FPM, что значительно повышает скорость.

Подключение готово. Для проверки создайте в корне приложения (root) файл info.php с содержимым <?php phpinfo(); ?> и убедитесь, что он отображает информацию о PHP, что подтвердит успешную интеграцию.

Как подключить PHP приложение к Nginx | PrepBro