Если 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-скрипты не выполняются, проверьте:
- Запущен ли PHP-FPM:
sudo systemctl status php7.4-fpm. - Совпадает ли версия PHP в
fastcgi_passс установленной на сервере. - Правильно ли настроены права доступа к файлам и каталогам.
Для дополнительной безопасности добавьте блок 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-fpmsystemctl 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.logtail -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.sockuser = 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 -tsudo systemctl restart nginx
Создайте тестовый PHP-файл в корневой директории сайта, например info.php, с содержимым:
<?php phpinfo(); ?>
Откройте этот файл в браузере, чтобы убедиться, что PHP работает корректно.






