NGINX - не указан входной файл. - php Fast/CGI

Привет. Мне нужна помощь в настройке config для nginx. Я новичок в NGINX и сталкиваюсь с некоторыми проблемами.

В моем sites-available есть default файл

Он содержит код ниже

server {
    server_name www.test.com test.com;
    access_log /sites/test/logs/access.log;
    error_log /sites/test/logs/error.log;
    root /sites/test;

 location ~ / {

index index.php
    include /etc/nginx/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Над кодом работает отлично, когда я пишу URL

www.test.com/service/public/

когда я пишу

www.test.com/service/public/testservice (testervice - это папка внутри public), она говорит No input file specified.

Как это исправить. спасибо заранее.

Я попробовал ниже, но не повезло

http://nginxlibrary.com/resolving-no-input-file-specified-error/
http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

Ответ 1

Вы должны добавить "include fastcgi.conf" в

location ~ \.$php{
  #......
  include fastcgi.conf;
}

Ответ 2

Устранение ошибки "Нет входного файла"

Если вы используете nginx с php-cgi и выполнили стандартную процедуру для его настройки, вы часто можете получить ошибку "Нет входного файла". Эта ошибка возникает, когда демон php-cgi не может найти файл .php для выполнения с использованием параметра SCRIPT_FILENAME, который был ему предоставлен. Я расскажу об общих причинах ошибки и ее решениях. Неправильный путь отправляется демону php-cgi

Чаще всего неправильный путь (SCRIPT_FILENAME) отправляется на демон fastCGI. Во многих случаях это связано с неправильной конфигурацией. Некоторые из настроек, которые я видел, настроены следующим образом:

server {
    listen   [::]:80;
    server_name  example.com www.example.com;
    access_log  /var/www/logs/example.com.access.log;  

    location / {
        root   /var/www/example.com;
        index  index.html index.htm index.pl;
    }

    location /images {
        autoindex on;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example.com$fastcgi_script_name;
        include fastcgi_params;
    }
}

Теперь в этой конфигурации много чего не так. Очевидной и вопиющей проблемой является корневая директива в расположении/блоке. Когда корень определен внутри блока местоположения, он доступен/определен только для этого блока. Здесь блок местоположения/изображений не будет соответствовать ни одному запросу, потому что у него нет определенного $document_root, и нам придется избыточно определить root для него. Очевидно, корневая директива должна быть перемещена из местоположения/блока и определена в блоке сервера. Таким образом, блоки местоположения наследуют значение, определенное в блоке родительского сервера. Конечно, если вы хотите определить другой $document_root для местоположения, вы можете поместить корневую директиву в блок местоположения.

Другая проблема заключается в том, что значение параметра fastCGI SCRIPT_FILENAME жестко закодировано. Если мы изменим значение корневой директивы и переместим наши файлы где-нибудь еще в цепочке каталогов, php-cgi вернет ошибку "Нет входного файла", потому что не сможет найти файл в жестко закодированном местоположении, которое didnt изменение при изменении $document_root. Итак, мы должны установить SCRIPT_FILENAME, как показано ниже:

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

Мы должны иметь в виду, что директива root должна быть в блоке сервера или иначе, только $fastcgi_script_name будет передана как SCRIPT_FILENAME, и мы получим ошибку "Нет входного файла".

source (Разрешение "Нет входного файла указано" )

Ответ 3

Просто перезагрузка моего php-fpm решила проблему. Как я понимаю, в основном проблема php-fpm, чем nginx.

Ответ 4

Такая же проблема.

Причина. Мой root не указан в open_basedir.
Исправить: добавление корневого каталога моего сайта в:

/etc/php5/fpm/pool.d/mysite.conf<br>

добавив эту директиву:

php_value[open_basedir] = /my/root/site/dir:/other/directory/allowed

Ответ 5

server {
    server_name www.test.com test.com;
    access_log /sites/test/logs/access.log;
    error_log /sites/test/logs/error.log;
    root /sites/test;

 location ~ / {

index index.php
    include /etc/nginx/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME `$document_root/service/public$fastcgi_script_name`;
}

Ответ 6

Я решил его, заменив

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

$document_root с C:\MyWebSite\www\

fastcgi_param SCRIPT_FILENAME C:\MyWebSite\www\$fastcgi_script_name;

Ответ 7

Это, вероятно, потому, что с завершающим косой чертой NGINx пытается найти индексный файл по умолчанию, который, вероятно, index.html без конфигурации. Без конечной косой черты он пытается сопоставить файл testervice, который он не может найти. Либо это, либо/или у вас нет файла индекса по умолчанию в папке testservice.

Попробуйте добавить эту строку в конфигурацию server:

index  index.php index.html index.htm; // Or in the correct priority order for you

Надеюсь, это поможет!

Изменить

Мой ответ не очень ясен, см. этот пример, чтобы понять, что я имею в виду

listen 80;

    server_name glo4000.mydomain.com www.glo4000.mydomain.com;


    access_log  /var/log/nginx/glo-4000.access.log;
    error_log /var/log/nginx/glo-4000.error_log;

    location / {
        root   /home/ul/glo-4000/;
        index  index.php index.html index.htm;
    }

    location ~ \.php$ {

        include fastcgi_params;
        fastcgi_pass   unix:/tmp/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /home/ul/glo-4000/$fastcgi_script_name;
    }
}

Ответ 8

У меня была такая же ошибка, и моя проблема заключалась в том, что у меня был мой php файл в моем зашифрованном домашнем каталоге. И я запускаю свой fpm с пользователем www-data, и этот пользователь не может читать php файлы, даже если права на файл были правильными. Solutioin заключался в том, что я запускаю fpm с пользователем, которому принадлежит домашний каталог. Это можно изменить в следующем файле:

/etc/php5/fpm/pool.d/www.conf

надеюсь, что это вам поможет:)

Ответ 9

Я попробовал все настройки выше, но это исправило мою проблему. Вы должны определить nginx, чтобы проверить, существует ли файл php в этом месте. Я нашел try_files $uri = 404; решение этой проблемы.

location ~ \.php$ {
        try_files  $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock; 
        include fastcgi_params;
        fastcgi_index index.php;
}

Ответ 10

Та же проблема.

Причины старых настроек open_basedir, скопированных с файлом мошенника user.ini в резервной копии

Решение удалить его

Ответ 11

Мой случай: SELinux был включен и запрещал php-fpm выполнять мои скрипты.

Диагноз: временно отключите SELinux и посмотрите, исчезнет ли проблема.

$ sudo setenforce permissive
### see if PHP scripts work ###
$ sudo setenforce enforcing

Решение: поместите каталог PHP в контекст httpd_sys_content_t. Вы можете использовать chcon или сделать изменения постоянными через semanage:

$ sudo semanage fcontext -a -t httpd_sys_content_t "/srv/myapp(/.*)?"
$ sudo restorecon -R -F /srv/myapp

Вы можете использовать контекст httpd_sys_rw_content_t где необходимы разрешения на запись.

Ответ 12

Эти ответы мне не помогли, мой администратор php показал мне ошибку "Не указан входной файл". Но я знал, что я изменил php-версию раньше. Итак, я нашел причину: это не nginx, это параметр php.ini doc_root! я нашел

doc_root =

в php.ini и изменил его на

; doc_root =

После этого патча мой админ работает хорошо.

Ответ 13

Я перепробовал все варианты, упомянутые выше, но наконец нашел решение. На моем сервере файл .php был установлен для чтения всеми, но он работал, когда я настроил запуск php-fpm от имени того же пользователя, что и nginx. Я изменил его в /etc/php/7.2/fpm/pool.d/www.conf и в файле конфигурации, который я установил

user = nginx group = nginx

и затем перезагрузил процесс php-fpm. Надеюсь, это поможет

Ответ 14

Если у кого-то все еще есть проблемы... Я решил это, исправив это так:

Внутри файла conf сайта (пример: /etc/nginx/conf.d/SITEEXAMPLE.conf) у меня есть следующая строка:

fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;

Ошибка возникает из-за того, что мой сайт НЕ находится в папке " /usr/share/nginx/html ", а в папке: /var/www/html/SITE/

Итак, измените эту часть, оставив код, как показано ниже. Примечание: для тех, кто использует стандарт сайта в /var/www/html/YOUR_SITE/

fastcgi_param  SCRIPT_FILENAME  /var/www/html/YOUR_SITE/$fastcgi_script_name;