Ответ 1
Вы должны добавить "include fastcgi.conf" в
location ~ \.$php{
#......
include fastcgi.conf;
}
Привет. Мне нужна помощь в настройке 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/
Вы должны добавить "include fastcgi.conf" в
location ~ \.$php{
#......
include fastcgi.conf;
}
Устранение ошибки "Нет входного файла"
Если вы используете 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, и мы получим ошибку "Нет входного файла".
Просто перезагрузка моего php-fpm решила проблему. Как я понимаю, в основном проблема php-fpm, чем nginx.
Такая же проблема.
Причина. Мой root не указан в open_basedir.
Исправить: добавление корневого каталога моего сайта в:
/etc/php5/fpm/pool.d/mysite.conf<br>
добавив эту директиву:
php_value[open_basedir] = /my/root/site/dir:/other/directory/allowed
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`;
}
Я решил его, заменив
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
$document_root с C:\MyWebSite\www\
fastcgi_param SCRIPT_FILENAME C:\MyWebSite\www\$fastcgi_script_name;
Это, вероятно, потому, что с завершающим косой чертой 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;
}
}
У меня была такая же ошибка, и моя проблема заключалась в том, что у меня был мой php файл в моем зашифрованном домашнем каталоге. И я запускаю свой fpm с пользователем www-data, и этот пользователь не может читать php файлы, даже если права на файл были правильными. Solutioin заключался в том, что я запускаю fpm с пользователем, которому принадлежит домашний каталог. Это можно изменить в следующем файле:
/etc/php5/fpm/pool.d/www.conf
надеюсь, что это вам поможет:)
Я попробовал все настройки выше, но это исправило мою проблему. Вы должны определить 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;
}
Та же проблема.
Причины старых настроек open_basedir, скопированных с файлом мошенника user.ini в резервной копии
Решение удалить его
Мой случай: 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
где необходимы разрешения на запись.
Эти ответы мне не помогли, мой администратор php показал мне ошибку "Не указан входной файл". Но я знал, что я изменил php-версию раньше. Итак, я нашел причину: это не nginx, это параметр php.ini doc_root! я нашел
doc_root =
в php.ini и изменил его на
; doc_root =
После этого патча мой админ работает хорошо.
Я перепробовал все варианты, упомянутые выше, но наконец нашел решение. На моем сервере файл .php был установлен для чтения всеми, но он работал, когда я настроил запуск php-fpm от имени того же пользователя, что и nginx. Я изменил его в /etc/php/7.2/fpm/pool.d/www.conf
и в файле конфигурации, который я установил
user = nginx group = nginx
и затем перезагрузил процесс php-fpm. Надеюсь, это поможет
Если у кого-то все еще есть проблемы... Я решил это, исправив это так:
Внутри файла 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;