Ответ 1
Попробуйте еще один * fastcgi_param * что-то вроде
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
Недавно я установил последнюю версию Nginx и выгляжу так, как будто мне сложно работать с PHP.
Вот файл конфигурации, который я использую для домена:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
}
Вот ошибка, которую я получаю в файле журнала ошибок:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
Попробуйте еще один * fastcgi_param * что-то вроде
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
У меня была проблема с "файлом не найдена", поэтому я переместил определение "root" в "сервер", чтобы указать значение по умолчанию для всех местоположений. Вы всегда можете переопределить это, указав любое место в своем корне.
server {
root /usr/share/nginx/www;
location / {
#root /usr/share/nginx/www;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
В качестве альтернативы я мог бы определить корень в обоих моих местоположениях.
Наверное, слишком поздно, чтобы ответить, но пара вещей, потому что это очень раздражающая ошибка. Следующее решение работало в Mac OS X Yosemite.
fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name;
Включение с быстрыми параметрами cgi должно идти выше этой строки.
Все ваши каталоги вплоть до исполняемого файла PHP (включая этот файл) должны иметь разрешения a+x
, например.
sudo chmod a+x /Users/ sudo chmod a+x /Users/oleg/ sudo chmod a+x /Users/oleg/www/ sudo chmod a+x /Users/oleg/www/a.php
В моем случае сам PHP- script возвратил код 404. Не имеет ничего общего с nginx.
У меня тоже была эта ошибка. В моем случае это было потому, что был другой виртуальный хост, который указывал на тот же корневой каталог.
В моем случае это произошло потому, что права на корневой веб-каталог были установлены неправильно. Для этого вам необходимо находиться в родительской папке, когда вы запускаете это в терминале:
sudo chmod -R 755 htmlfoldername
Это будет chmod всех файлов в вашей html-папке, что не рекомендуется для производства по соображениям безопасности, но должно позволить вам видеть файлы в этой папке, чтобы быть уверенным, что это не проблема при устранении неполадок.
Я потратил всего 40 минут, чтобы отладить нерабочий/статус с помощью:
$ SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php5-fpm.sock
Он просто произвел ошибку "Файл не найден", в то время как фактические сценарии (которые находятся в файловой системе) работали нормально.
Оказалось, у меня было несколько сиротских процессов php5-fpm. После того, как я убил все и перезапустил php5-fpm чисто, он просто вернулся к нормальной жизни.
Надеюсь, что это поможет.
У меня были те же проблемы, и во время тестов я столкнулся с обеими проблемами:
1º: "Файл не найден"
а также
2º: страница ошибки 404
И я узнал, что в моем случае:
Мне приходилось монтировать тома для моих общих папок как на томах Nginx, так и на томах PHP.
Если он смонтирован в Nginx и не смонтирован в PHP, он выдаст: " Файл не найден "
Примеры (будет отображаться "Файл не найден"):
services:
php-fpm:
build:
context: ./docker/php-fpm
nginx:
build:
context: ./docker/nginx
volumes:
#Nginx Global Configurations
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d/:/etc/nginx/conf.d
#Nginx Configurations for you Sites:
# - Nginx Server block
- ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
# - Copy Public Folder:
- ./sites/example.com/root/public/:/var/www/example.com/public
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
restart: always
Если он смонтирован в PHP и не смонтирован в Nginx, он выдаст ошибку 404 Page Not Found.
Пример (выдает ошибку 404 Page Not Found):
version: '3'
services:
php-fpm:
build:
context: ./docker/php-fpm
volumes:
- ./sites/example.com/root/public/:/var/www/example.com/public
nginx:
build:
context: ./docker/nginx
volumes:
#Nginx Global Configurations
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d/:/etc/nginx/conf.d
#Nginx Configurations for you Sites:
# - Nginx Server block
- ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
restart: always
И это будет нормально работать (монтируется с обеих сторон) (при условии, что все остальное хорошо настроено, и вы столкнулись с той же проблемой, что и я):
version: '3'
services:
php-fpm:
build:
context: ./docker/php-fpm
volumes:
# Mount PHP for Public Folder
- ./sites/example.com/root/public/:/var/www/example.com/public
nginx:
build:
context: ./docker/nginx
volumes:
#Nginx Global Configurations
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d/:/etc/nginx/conf.d
#Nginx Configurations for you Sites:
# - Nginx Server block
- ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
# - Copy Public Folder:
- ./sites/example.com/root/public/:/var/www/example.com/public
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
restart: always
Также здесь представлен полный рабочий пример проекта с использованием Nginx/Php для обслуживания нескольких сайтов: https://github.com/Pablo-Camara/simple-multi-site-docker-compose-nginx-alpine-php-fpm-alpine-https -ssl-сертификаты
Я надеюсь, что это кому-то поможет, и если кто-то знает об этом, пожалуйста, дайте мне знать, спасибо!
Для меня проблемой была Typo в пути к местоположению.
Возможно, первое, что нужно проверить для этой проблемы
Это путь к проекту.
После обновления до PHP72 у нас возникла проблема, из-за которой php-fpm.d/www.conf потерял настройки пользователя/группы, которые вызывали эту ошибку. Не забудьте проверить их дважды, если ваша настройка включает php-fpm.
Когда я получал "Файл не найден", моя проблема заключалась в том, что в папке, где указывал эту строку в конфигурации ngix, не было символической ссылки:
root /var/www/claims/web;