Как подключить PHP приложение к Nginx
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Подключение 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, что подтвердит успешную интеграцию.