Nginx не обрабатывает PHP причины и способы устранения

Если Nginx не обрабатывает PHP-файлы, проверьте конфигурацию сервера. Убедитесь, что в блоке location для обработки PHP указан правильный путь к сокету или порту FastCGI. Например, для PHP-FPM это может выглядеть так: fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;. Если используется TCP-соединение, укажите fastcgi_pass 127.0.0.1:9000;.

Частой причиной проблемы является отсутствие или неправильная настройка файла fastcgi_params. Убедитесь, что он подключен в конфигурации Nginx с помощью директивы include fastcgi_params;. Этот файл содержит необходимые параметры для корректной передачи данных между Nginx и PHP-FPM.

Если конфигурация верна, но PHP-код всё равно не выполняется, проверьте права доступа к файлам. Убедитесь, что веб-сервер имеет доступ к директории с PHP-скриптами и к сокету PHP-FPM. Например, выполните команду chown -R www-data:www-data /var/www/your-site для установки правильного владельца.

В случае, если проблема сохраняется, проверьте лог-файлы Nginx и PHP-FPM. Логи Nginx находятся в /var/log/nginx/error.log, а логи PHP-FPM – в /var/log/php7.4-fpm.log (путь может отличаться в зависимости от версии PHP). Анализ логов поможет выявить конкретные ошибки, такие как отсутствие модулей или неправильные настройки.

Если всё настроено верно, но PHP-скрипты всё равно не работают, попробуйте перезапустить службы. Выполните команды systemctl restart nginx и systemctl restart php7.4-fpm (замените версию PHP на актуальную). Это поможет применить изменения и устранить возможные временные сбои.

Неправильная конфигурация Nginx

Проверьте блок location в конфигурации Nginx, чтобы убедиться, что он корректно обрабатывает PHP-файлы. Убедитесь, что указан путь к сокету или порту PHP-FPM. Например, добавьте или обновите блок следующим образом:

location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Если используется TCP вместо сокета, укажите fastcgi_pass 127.0.0.1:9000;. Убедитесь, что PHP-FPM настроен на тот же порт или сокет.

Проверьте права доступа к сокету или порту PHP-FPM. Убедитесь, что пользователь, под которым работает Nginx, имеет доступ к сокету. Например, для сокета /var/run/php/php7.4-fpm.sock выполните команду chmod 660 /var/run/php/php7.4-fpm.sock и установите владельца на www-data или другого пользователя, используемого Nginx.

Убедитесь, что директивы include snippets/fastcgi-php.conf; и include fastcgi_params; присутствуют в конфигурации. Они содержат необходимые параметры для обработки PHP. Если файлы отсутствуют, создайте их или скопируйте из стандартных конфигураций.

Проверьте, что путь к SCRIPT_FILENAME указан корректно. Используйте переменную $document_root, чтобы избежать ошибок с неправильными путями к файлам. Например, fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;.

Перезагрузите конфигурацию Nginx после внесения изменений с помощью команды sudo nginx -t && sudo systemctl reload nginx. Это позволит применить изменения и проверить конфигурацию на ошибки.

Проверка конфигурационных файлов

Откройте файл конфигурации Nginx, обычно расположенный в /etc/nginx/nginx.conf или /etc/nginx/sites-available/default. Убедитесь, что в блоке server настроена обработка PHP-файлов. Проверьте наличие строки index index.php index.html index.htm; в директиве index.

Убедитесь, что блок location ~ .php$ настроен корректно. Он должен включать директивы для передачи запросов PHP-FPM или другому обработчику. Пример правильной конфигурации:

location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Проверьте, что путь к сокету PHP-FPM в fastcgi_pass соответствует вашей версии PHP. Если используется TCP-соединение, убедитесь, что указан правильный IP-адрес и порт.

После внесения изменений выполните команду nginx -t, чтобы проверить синтаксис конфигурации. Если ошибок нет, перезагрузите Nginx командой systemctl reload nginx.

Если проблема сохраняется, проверьте конфигурацию PHP-FPM. Откройте файл /etc/php/7.4/fpm/pool.d/www.conf (путь может отличаться в зависимости от версии PHP) и убедитесь, что параметры listen совпадают с настройками в Nginx.

Убедитесь, что конфигурационные файлы Nginx не содержат ошибок, которые мешают обработке PHP.

Убедитесь, что блок location ~ .php$ настроен правильно. Он должен включать директивы для передачи запросов PHP-FPM. Пример корректной настройки:

location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Проверьте, что путь к сокету PHP-FPM (fastcgi_pass) указан верно. Убедитесь, что версия PHP в пути соответствует установленной. Если используется TCP-соединение, убедитесь, что адрес и порт указаны правильно, например: fastcgi_pass 127.0.0.1:9000;.

Просмотрите файл fastcgi_params или snippets/fastcgi-php.conf. Убедитесь, что они содержат необходимые параметры для обработки PHP, такие как SCRIPT_FILENAME и PATH_INFO.

После внесения изменений перезагрузите Nginx с помощью команды systemctl reload nginx. Проверьте, начал ли сервер корректно обрабатывать PHP-файлы.

Настройка блоков серверов

Проверьте конфигурацию блоков серверов в Nginx, чтобы убедиться, что они корректно обрабатывают PHP-файлы. Для этого откройте файл конфигурации, обычно расположенный в /etc/nginx/sites-available/default, и убедитесь, что блок location для обработки PHP настроен правильно.

Добавьте или обновите следующий фрагмент в блоке сервера:

location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Убедитесь, что путь к сокету PHP-FPM (fastcgi_pass) соответствует версии PHP, установленной на вашем сервере. Например, для PHP 8.0 путь будет выглядеть как /var/run/php/php8.0-fpm.sock.

Проверьте, что директивы include указывают на существующие файлы. Если файлы отсутствуют, создайте их или скопируйте из стандартных примеров конфигурации Nginx.

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

sudo systemctl reload nginx

Если проблема сохраняется, проверьте права доступа к файлам и каталогам. Убедитесь, что пользователь, под которым работает Nginx (обычно www-data), имеет доступ к PHP-файлам и каталогам.

Правильная настройка серверных блоков, включая location-директивы для PHP.

Убедитесь, что в конфигурации серверного блока Nginx указаны правильные location-директивы для обработки PHP-файлов. Используйте следующий пример для настройки:

server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.ht {
deny all;
}
}

Обратите внимание на ключевые моменты:

  • Укажите корневой каталог проекта в root.
  • Добавьте index.php в список файлов, которые Nginx будет искать по умолчанию.
  • Используйте location ~ .php$ для обработки PHP-файлов через FastCGI.
  • Убедитесь, что путь к сокету PHP-FPM (fastcgi_pass) указан корректно.

Если PHP-скрипты не выполняются, проверьте:

  1. Запущен ли PHP-FPM: sudo systemctl status php7.4-fpm.
  2. Совпадает ли версия PHP в fastcgi_pass с установленной на сервере.
  3. Правильно ли настроены права доступа к файлам и каталогам.

Для дополнительной безопасности добавьте блок location ~ /.ht, чтобы запретить доступ к скрытым файлам, таким как .htaccess.

После внесения изменений перезагрузите Nginx: sudo systemctl reload nginx.

Подключение FastCGI

Для обработки PHP через Nginx используйте FastCGI. Убедитесь, что у вас установлен PHP-FPM. Откройте конфигурационный файл Nginx, обычно расположенный в /etc/nginx/nginx.conf или /etc/nginx/sites-available/default, и добавьте следующий блок в секцию server:


location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Замените php7.4-fpm.sock на версию PHP, установленную на вашем сервере. Проверьте правильность пути к сокету, выполнив команду ls /var/run/php/.

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


sudo systemctl reload nginx

Если PHP-скрипты всё ещё не обрабатываются, проверьте права доступа к файлам и папкам. Убедитесь, что пользователь, от имени которого работает Nginx, имеет доступ к PHP-FPM и файлам сайта. Для этого выполните команду:


sudo chown -R www-data:www-data /var/www/ваш_сайт

Если проблемы сохраняются, проверьте логи Nginx и PHP-FPM для получения дополнительной информации:


sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/php7.4-fpm.log

В таблице ниже приведены основные параметры, которые могут потребовать корректировки:

Параметр Описание Пример
fastcgi_pass Указывает адрес или сокет для подключения к PHP-FPM unix:/var/run/php/php7.4-fpm.sock
fastcgi_param Определяет параметры, передаваемые в PHP-FPM SCRIPT_FILENAME $document_root$fastcgi_script_name
include Подключает дополнительные конфигурационные файлы include fastcgi_params;

После выполнения этих шагов PHP-скрипты должны корректно обрабатываться через Nginx.

Как организовать взаимодействие Nginx с PHP-FPM через FastCGI.

Для корректной обработки PHP-скриптов настройте Nginx для работы с PHP-FPM через FastCGI. Начните с проверки установки и запуска PHP-FPM. Убедитесь, что служба активна, выполнив команду:

  • systemctl status php-fpm

Если PHP-FPM не запущен, активируйте его:

  • systemctl start php-fpm
  • systemctl enable php-fpm

Отредактируйте конфигурационный файл Nginx для вашего сайта. Добавьте блок location для обработки PHP-файлов:

location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Убедитесь, что путь к сокету PHP-FPM (/var/run/php/php7.4-fpm.sock) соответствует вашей версии PHP. Проверьте его в конфигурации PHP-FPM, которая обычно находится в /etc/php/7.4/fpm/pool.d/www.conf.

После внесения изменений перезагрузите Nginx:

  • systemctl reload nginx

Проверьте работоспособность, создав тестовый PHP-файл в корневой директории сайта:

<?php
phpinfo();
?>

Откройте файл в браузере. Если настройки выполнены верно, вы увидите страницу с информацией о PHP.

При возникновении ошибок проверьте логи Nginx и PHP-FPM:

  • tail -f /var/log/nginx/error.log
  • tail -f /var/log/php7.4-fpm.log

Отсутствие необходимых модулей и зависимостей

Проверьте, установлены ли модули PHP-FPM и FastCGI для Nginx. Без них сервер не сможет обрабатывать PHP-скрипты. Убедитесь, что они активны и корректно настроены.

Для установки PHP-FPM выполните команду:

sudo apt install php-fpm

После установки проверьте, запущен ли сервис PHP-FPM:

sudo systemctl status php-fpm

Если сервис не активен, запустите его:

sudo systemctl start php-fpm

Убедитесь, что Nginx настроен на взаимодействие с PHP-FPM. Откройте конфигурационный файл вашего сайта и добавьте или проверьте следующие строки:

location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}

Если вы используете другую версию PHP, замените путь к сокету. Например, для PHP 8.0:

fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;

После внесения изменений перезагрузите Nginx:

sudo systemctl reload nginx

Если проблема сохраняется, проверьте, установлены ли все необходимые зависимости для PHP. Используйте команду:

sudo apt install php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip

Эти модули часто требуются для корректной работы PHP-приложений. После установки перезапустите PHP-FPM и Nginx.

Команда Описание
sudo apt install php-fpm Установка PHP-FPM
sudo systemctl status php-fpm Проверка статуса PHP-FPM
sudo systemctl reload nginx Перезагрузка Nginx

Установка PHP и PHP-FPM

Установите PHP и PHP-FPM с помощью менеджера пакетов вашего дистрибутива. Для Ubuntu или Debian выполните команду: sudo apt install php-fpm php-mysql. В CentOS или RHEL используйте: sudo yum install php-fpm php-mysqlnd. Эти команды установят PHP вместе с модулем для работы с MySQL и PHP-FPM – процессом, который обрабатывает PHP-скрипты.

После установки настройте PHP-FPM. Откройте конфигурационный файл, расположенный по пути /etc/php/7.x/fpm/pool.d/www.conf (где 7.x – версия PHP). Убедитесь, что параметр listen установлен на listen = /run/php/php7.x-fpm.sock. Это позволит Nginx взаимодействовать с PHP-FPM через сокет.

Запустите и включите PHP-FPM в автозагрузку. Для этого выполните команды: sudo systemctl start php7.x-fpm и sudo systemctl enable php7.x-fpm. Проверьте статус службы: sudo systemctl status php7.x-fpm, чтобы убедиться, что она работает корректно.

Настройте Nginx для работы с PHP-FPM. В конфигурации вашего сайта добавьте блок, обрабатывающий PHP-запросы:


location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.x-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Перезапустите Nginx для применения изменений: sudo systemctl restart nginx. Проверьте работоспособность, создав файл info.php в корневой директории сайта с содержимым <?php phpinfo(); ?>. Откройте его в браузере, чтобы убедиться, что PHP обрабатывается корректно.

Процесс установки PHP и его компонент, необходимых для работы с Nginx.

Установите PHP и необходимые модули с помощью менеджера пакетов вашей операционной системы. Для Ubuntu или Debian выполните команду:

  • sudo apt install php-fpm php-mysql

Для CentOS или Fedora используйте:

  • sudo yum install php-fpm php-mysqlnd

После установки проверьте версию PHP, чтобы убедиться в успешной инсталляции:

  • php -v

Настройте PHP-FPM для работы с Nginx. Откройте файл конфигурации PHP-FPM, обычно расположенный в /etc/php/{версия}/fpm/pool.d/www.conf, и убедитесь, что параметры listen и user корректны:

  • listen = /run/php/php{версия}-fpm.sock
  • user = www-data (или nginx для CentOS)

Перезапустите PHP-FPM для применения изменений:

  • sudo systemctl restart php{версия}-fpm

В конфигурации Nginx добавьте обработку PHP-файлов. Откройте файл конфигурации сайта и включите следующие строки:


location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php{версия}-fpm.sock;
}

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

  • sudo nginx -t
  • sudo systemctl restart nginx

Создайте тестовый PHP-файл в корневой директории сайта, например info.php, с содержимым:


<?php phpinfo(); ?>

Откройте этот файл в браузере, чтобы убедиться, что PHP работает корректно.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии