Вопрос или проблема
Я установил Nginx 1.6.2 с PHP-FPM (PHP 5.5.18) на сервере CentOS 6.6. Я ничего не трогал, кроме файла /etc/nginx/conf.d/default.conf
, в котором внес несколько изменений (см. ниже):
server {
listen 80;
server_name webvm devserver ;
location / {
root /var/www/html;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
root /var/www/html;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
}
}
После перезагрузки Nginx и попытки получить доступ к файлу http://devserver/index.php
я получаю следующую ошибку:
2014/12/01 19:48:51 [error] 5014#0: *6 FastCGI sent in stderr:
“Primary script unknown” при чтении заголовка ответа от upstream,
клиент: 192.168.3.1, сервер: webvm, запрос: “GET /index.php
HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, хост: “devserver”
Я также проверил права/владельца для /var/www/html
с помощью команды ls -l
, и вот вывод:
#ls -l /var/www/html/
total 4
-rw-r--r-- 1 root root 23 Dec 1 19:29 index.php
Я ничего не трогал в пуле PHP-FPM, поэтому файл /etc/php-fpm.d/www.conf
имеет настройку по умолчанию:
listen = 127.0.0.1:9000
user = apache
group = apache
Могут ли быть проблемы с правами?
Я прочитал несколько постов здесь (например, 1,2,3), обсуждающих эту же ошибку и возможные решения, и пытался применить их к своей ситуации, но не могу добиться результата, поэтому мне нужна помощь: что я делаю не так?
Примечание: Я исключил закомментированные строки из файла, так как они не имеют значения.
Для меня проблема с "Primary script unknown" при чтении заголовка ответа от upstream
заключалась в том, что один из php-расширений был удален, в то время как его конфигурация все еще находилась на диске (в частности, это был модуль redis). Проверка /etc/php/XX/pool.d/*
на наличие конфигураций модулей (.ini файлы) и установленных модулей (или удаление конфигурации) исправила проблему. После установки одного отсутствующего модуля все снова заработало.
Это не была ошибка NGINX, а проблема с php-расширениями.
Измените www.conf
user = nginx
group = nginx
Измените fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; на
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
И также проверьте, есть ли у вас файл httacess в /var/www/html. Обычно это вызывает проблему.
Ответ или решение
Ошибка "Primary script unknown" в Nginx при взаимодействии с PHP-FPM может быть связана с несколькими возможными причинами, включая неправильную конфигурацию, ошибки в путях, или разрешениях на файлы. Давайте разберем данную ситуацию и предложим решения.
1. Ошибка в параметре SCRIPT_FILENAME
Ваш текущий параметр SCRIPT_FILENAME
в конфигурации Nginx выглядит так:
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
Это может быть одной из причин вашей проблемы. Вам нужно изменить его на:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Не забудьте перезапустить Nginx после внесения изменений:
sudo service nginx restart
2. Пользователь и группа в PHP-FPM
В вашем файле конфигурации PHP-FPM (обычно /etc/php-fpm.d/www.conf
) пользователь и группа указаны как apache
. Для улучшения работоспособности их можно изменить на nginx
, чтобы соответствовать пользователю, запускающему Nginx:
user = nginx
group = nginx
Не забудьте перезапустить PHP-FPM после изменения конфигурации:
sudo service php-fpm restart
3. Права и владелец файлов
Убедитесь, что пользователь nginx
имеет доступ к файлам в директории /var/www/html
. Проверьте владельца и права доступа к файлу:
ls -l /var/www/html/
Для исправления прав доступа вы можете установить пользователя и группу для всех файлов и папок:
sudo chown -R nginx:nginx /var/www/html
sudo chmod -R 755 /var/www/html
4. Проверьте наличие .htaccess
Хотя Nginx не использует .htaccess
, некоторые конфигурации могут зависеть от его наличия. Убедитесь, что в /var/www/html
нет файлов .htaccess
, содержащих неверные команды, если вы когда-либо мигрировали с Apache.
5. Проверьте наличие необходимых PHP расширений
Как упомянули другие пользователи, проблема может быть связана с отсутствующими модулем PHP. Убедитесь, что все необходимые модули установлены. Например, если у вас есть ссылка на использование Redis, убедитесь, что модуль Redis действительно установлен. Вы можете проверить установленные модули с помощью:
php -m
Или же проверьте директорию etc/php/XX/pool.d/
, чтобы убедиться, что там нет устаревших конфигураций.
Подведение итогов
После выполнения всех вышеуказанных шагов, возможно, проблема будет решена. Если ошибка по-прежнему сохраняется, следует проверить логи Nginx и PHP-FPM для получения дополнительной информации о возможных ошибках.
# Для логов Nginx
tail -f /var/log/nginx/error.log
# Для логов PHP-FPM
tail -f /var/log/php-fpm/www-error.log
Эти шаги должны помочь в диагностике и устранении проблемы. Если у вас будут дополнительно возникать вопросы, не стесняйтесь задавать их.