Я впервые использую Nginx, но я более чем знаком с Apache и Linux. Я использую существующий проект, и когда я пытаюсь увидеть index.php, я получаю 404 Файл не найден.
Вот запись access.log:
2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.ordercloud.lh"
А вот файл с сайтами:
server {
set $host_path "/home/willem/git/console/www";
access_log /www/logs/console-access.log main;
server_name console.ordercloud;
root $host_path/htdocs;
set $yii_bootstrap "index.php";
charset utf-8;
location / {
index index.html $yii_bootstrap;
try_files $uri $uri/ /$yii_bootstrap?$args;
}
location ~ ^/(protected|framework|themes/\w+/views) {
deny all;
}
#avoid processing of calls to unexisting static files by yii
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
try_files $uri =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(.*)$;
#let yii catch the calls to unexising PHP files
set $fsn /$yii_bootstrap;
if (-f $document_root$fastcgi_script_name){
set $fsn $fastcgi_script_name;
}
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fsn;
#PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for CGI
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fsn;
}
location ~ /\.ht {
deny all;
}
}
Мой / home / willem / git / console принадлежит www-data: www-data (мой веб-пользователь работает под управлением php и т. Д.), И я дал ему 777 разрешений из-за разочарования ...
Я думаю, что с конфигурацией что-то не так, но я не могу понять ...
ОБНОВЛЕНИЕ
Итак, я переместил его /var/www/
и использовал гораздо более простой конфиг:
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default ipv6only=on; ## listen for ipv6
root /var/www/;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name console.ordercloud;
location / {
root /var/www/console/frontend/www/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www;
include fastcgi_params;
}
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
try_files $uri =404;
}
location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
deny all;
}
}
Также, если я позвоню, localhost/console/frontend/www/index.php
я получу 500 PHP, что означает, что он там служит. Он просто не работает с console.ordercloud ...
Ответы:
Сообщение об ошибке «основной сценарий неизвестен» почти всегда связано с неверно установленной директивой
SCRIPT_FILENAME
nginxfastcgi_param
(или неправильными разрешениями, см. Другие ответы).Вы используете
if
в конфигурации, которую вы опубликовали в первую очередь. Ну, к настоящему времени должно быть хорошо известно, что если это зло и часто создает проблемы.Установка
root
директивы внутри блока местоположения - плохая практика, конечно, это работает.Вы можете попробовать что-то вроде следующего:
Обратите внимание, что вышеуказанная конфигурация не проверена. Вы должны выполнить его
nginx -t
перед тем, как проверять наличие проблем, которые nginx может обнаружить сразу.источник
root
пределах местоположения?http
разделе следующее:log_format scripts '$document_root$fastcgi_script_name > $request';
(или все , что вы питаетесь в SCRIPT_FILENAME), и к вашемуserver
:access_log /var/log/nginx/scripts.log scripts
. Перезагрузите и посмотрите на ваш новый журнал сценариев;)Не всегда это
SCRIPT_FILENAME
неправильно.Также может быть, что PHP работает как неправильный пользователь / группа .
Этот пример специфичен для Mac OS X , которая, по моему опыту, является самой сложной в настройке (Debian прост для сравнения) - я только что обновил PHP 5.6 до 7.0, используя homebrew и превосходные пакеты josegonzalez.
Проблема заключалась в том, что была создана новая копия файлов конфигурации.
Основной файл конфигурации есть
/usr/local/etc/php/7.0/php-fpm.conf
, но обратите внимание на раздел « Определения пула » в конце, где он содержит целый подкаталог.include=/usr/local/etc/php/7.0/php-fpm.d/*.conf
Там
php-fpm.d
естьwww.conf
файл. По умолчанию это имеет:В OS X вам может потребоваться изменить это на:
(вы должны найти это соответствует
ls -lh
вашему document_root)К сожалению, без этого изменения вы все равно увидите это в журнале ошибок Nginx, даже если он ищет файл в правильном месте .
Проверьте, что это в настоящее время работает как:
или более чисто:
Как проверить правильность имени файла скрипта:
(украдено у igorsantos07 в другом ответе)
Добавить в
http
блок основных/usr/local/etc/nginx/nginx.conf
:(где первый бит должен быть тем, что вы сейчас используете, так что вы можете увидеть, правильно ли это.)
И чтобы использовать журнал, который вы только что определили, в
server
блоке вашего сайта :Если это правильно, запрос example.com/phpinfo.php выдаст что-то вроде этого:
Можете ли вы упростить вашу существующую конфигурацию?
Используете ли вы
location ~ \.php {
блок, который вы скопировали / вставили из Интернета? Большинство пакетов позволяют сделать это быстрее и аккуратнее. например, на OS X теперь вам просто нужно это:Такие вещи, как fastcgi_split_path_info, try_files и fastcgi_index (по умолчанию index.php) находятся в
/usr/local/etc/nginx/snippets/fastcgi-php.conf
.Это, в свою очередь, включает
/usr/local/etc/nginx/fastcgi.conf
в себя списокfastcgi_param
настроек, в том числе ключевой SCRIPT_FILENAME.Никогда не дублируйте
root
в блоке местоположения PHP.источник
/etc/php/7.0/php-fpm.d/www.conf
файла. Приветствую тебя, приятель. :) Многие другие люди могут начать видеть эту проблему также, поскольку бродячая популярность продолжает расти./usr/local/etc/nginx/snippets/fastcgi-php.conf
на моем Mac .. но я нашел/usr/local/etc/nginx/fastcgi.conf
Итак, 3 вещи, которые я нашел после дня борьбы
Надеюсь, это спасет кого-то от неприятностей!
источник
Была такая же проблема с более новым nginx (v1.8). Более новые версии рекомендуют использовать
snippets/fastcgi-php.conf;
вместоfastcgi.conf
. Поэтому, если вы скопируете / вставитеinclude fastcgi.conf
из учебника, вы можете получитьPrimary script unknown
ошибку в журнале.источник
«Основной сценарий неизвестен» вызван контекстом безопасности SELinux.
клиент получает ответ
nginx error.log имеет следующее сообщение об ошибке
поэтому просто измените тип контекста безопасности корневой веб-папки на httpd_sys_content_t
есть 3 пользователя для конфигурации nginx / php-fpm
/etc/nginx/nginx.conf
/etc/nginx/conf.d/www.conf
/etc/php-fpm.d/www.conf
user-1 и user-2 не обязательно должны быть одинаковыми.
для сокета unix пользователь-1 должен быть таким же, как пользователь-3, поскольку nginx fastcgi_pass должен иметь разрешение на чтение / запись на сокете unix.
в противном случае nginx получит 502 Bad Gateway , а nginx error.log выдает следующее сообщение об ошибке
и пользователь / группа корневой веб-папки (/ var / www / show) не обязательно должен быть таким же, как любой из этих 3 пользователей.
источник
У меня тоже была эта проблема, и я решил ее путем обмена линиями
include fastcgi_params
иfastcgi_param SCRIPT_FILENAME ...
.Действительно, nginx устанавливает последнее значение каждого параметра FastCGI, поэтому вы должны поместить свое значение после значения по умолчанию, включенного в fastcgi_params.
источник
Я решил эту проблему, закрыв SELINUX в системе CentOS7.3
шаги:
setenforce 0
vim /etc/selinux/config set SELINUX to disabled
источник
Я нашел ваш вопрос ищет то же сообщение об ошибке, но с использованием apache + php-fpm (без nginx). Для меня проблема была косой чертой в неправильном месте: многие предложения по настройке включают строку вида:
Поместив последнюю косую черту после номера порта, вот так:
проблема исчезла для меня. Может быть, вы можете сделать что-то подобное
источник
источник
Я клонировал удаленный сайт, и уже существующий файл wp-config.php содержал информацию о базе данных удаленного сервера.
Я решил эту проблему, настроив свой локальный конфигуратор WordPress, с моей локальной информацией базы данных.
источник
Я сделал все сверху, потерял 2 часа, стуча головой, и проблема все еще сохранялась. Наконец я сделал:
И альт это сработало!
Кстати, я настраивал свежий проект Symfony 3.4 с помощью nginx conf по ссылке: https://symfony.com/doc/3.4/setup/web_server_configuration.html
Это был мой пятый раз, когда я начинал новый проект Symfony, и я не мог поверить, что этот «Первичный сценарий неизвестен» происходит.
источник
Проверьте разрешения для вашего php-fpm sock-файла, так или иначе, он не был доступен:
chmod 755 /usr/local/var/run/php-fpm.sock
затем попробуйте перезапустить nginx.
источник
Я был пойман в ловушку этим странным сообщением в течение очень долгого времени. Я не уверен в причине, потому что все работало некоторое время, затем внезапно перестало работать.
Я сокращал вики-адреса в соответствии с предписаниями MediaWiki, используя Bitnami / Nginx на Lightsail.
Обыскал и прочитал много постов, этот, кажется, суммирует все возможные сценарии, и я попробовал их все:
root
на сервер, не работаетПоэтому мне пришлось попробовать последнее средство, поскольку php корневой папки работал, а подпапки - нет, единственное существенное различие между ними, кроме
root
используемой корневой папки$request_filename
и расположения подпапок,$document_root
и$fastcgi_script_name
поэтому я изменил настройки расположения подпапок, чтобы они соответствовали настройкам корневой папки.Тогда это сработало ... Я до сих пор не уверен, почему это сработало. Потому что, когда я проверяю журнал доступа php-fpm, я вижу тот же URI, один был 404, а другой 200.
Единственная разница была в конфигурации. Поскольку они дают одинаковый результат, я не знаю, почему результат получился по-разному.
В любом случае я решил опубликовать свои 2 цента здесь, надеюсь, это поможет.
PS: я действительно надеюсь, что PHP предоставит лучшие сообщения об ошибках и подробный режим, потому что это действительно расстраивает невозможность изолировать проблему и нет возможности увидеть подробный вывод и отладочную информацию.
источник
Попробуйте добавить корневую директиву в ваше местоположение php.
источник
root
Директива должна быть установлена на наserver
основе и не должны использоваться в любыхlocation
блоках (если вы не профессионал и хотите , чтобы обойти некоторые особые Nginx ошибки в конфигурации).root
директиву внутриlocation
блока.root
директив внутри несколькихlocation
блоков явно под заголовком BAD.