Подтвердить что ты не робот

Файл не найден при запуске PHP с Nginx

Недавно я установил последнюю версию 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
4b9b3361

Ответ 1

Попробуйте еще один * fastcgi_param * что-то вроде

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

Ответ 2

У меня была проблема с "файлом не найдена", поэтому я переместил определение "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;
    }
}

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

Ответ 3

Наверное, слишком поздно, чтобы ответить, но пара вещей, потому что это очень раздражающая ошибка. Следующее решение работало в Mac OS X Yosemite.

  • Это лучшее, если у вас есть

fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name;

  1. Включение с быстрыми параметрами cgi должно идти выше этой строки.

  2. Все ваши каталоги вплоть до исполняемого файла 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

Ответ 4

В моем случае сам PHP- script возвратил код 404. Не имеет ничего общего с nginx.

Ответ 5

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

Ответ 6

В моем случае это произошло потому, что права на корневой веб-каталог были установлены неправильно. Для этого вам необходимо находиться в родительской папке, когда вы запускаете это в терминале:

sudo chmod -R 755 htmlfoldername

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

Ответ 7

Я потратил всего 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 чисто, он просто вернулся к нормальной жизни.

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

Ответ 8

У меня были те же проблемы, и во время тестов я столкнулся с обеими проблемами:

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-сертификаты

Я надеюсь, что это кому-то поможет, и если кто-то знает об этом, пожалуйста, дайте мне знать, спасибо!

Ответ 9

Для меня проблемой была Typo в пути к местоположению.

Возможно, первое, что нужно проверить для этой проблемы

Это путь к проекту.

Ответ 10

После обновления до PHP72 у нас возникла проблема, из-за которой php-fpm.d/www.conf потерял настройки пользователя/группы, которые вызывали эту ошибку. Не забудьте проверить их дважды, если ваша настройка включает php-fpm.

Ответ 11

Когда я получал "Файл не найден", моя проблема заключалась в том, что в папке, где указывал эту строку в конфигурации ngix, не было символической ссылки:

root /var/www/claims/web;