Ошибка Nginx: “Основной скрипт неизвестен” при чтении заголовка ответа от upstream.

Вопрос или проблема

Я установил 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

Эти шаги должны помочь в диагностике и устранении проблемы. Если у вас будут дополнительно возникать вопросы, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...