Nginx + php5-fpm = „Nie znaleziono pliku”


14

Uderzyłem w ścianę podczas konfigurowania strony przy użyciu nginx / fpm. Strona wyświetla komunikat „Nie znaleziono pliku”, który pojawia się w pliku nginx error.log:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

Jestem nowy zarówno w Nginx, jak i fpm, a ten komunikat o błędzie nic dla mnie nie znaczy (nawet maszyna google nie pomogła!). Czy ktoś może rzucić jakieś światło na to, co może się dziać?


Czy możesz dodać część konfiguracji nginx, w której definiujesz obsługę PHP?
Christopher Perrin

Pomógł mi następujący artykuł: nginxlibrary.com/resolving-no-input-file-specified-error . Ogólnie ten błąd występuje, jeśli występuje problem z SCRIPT_FILENAME.
white_gecko

Odpowiedzi:


18

Powinieneś mieć locationsekcję do obsługi żądań PHP skonfigurowaną podobnie do tego:

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include         fastcgi_params;
    }

(Dodatek try_filesusuwa lukę w zabezpieczeniach, która może umożliwić wykonanie dowolnych plików jako PHP.)

Ponadto, twój rootpowinna być zdefiniowana w serversekcji pliku konfiguracyjnego, nielocation przekroju. Jest to jedna z najczęstszych błędów konfiguracji nginx .


+1 za artykuł o błędnych konfiguracjach - naprawdę warto przeczytać, szczególnie jeśli uczysz się Nginx. Dobrze napisany, podstawowy, z kilkoma świetnymi wskazówkami!
Ben

2

To uwaga dla instalacji pasażerskich.

Właśnie zainstalowałem nginx ze źródła przez pasażera, co spowodowało problem z php5-fpm. Domyślny plik nginx.conf korzysta z problemu opisanego przez Michaela Hamptona. Rozwiązaniem jest usunięcie bloku wokół dyrektyw root i index, aby:

location / {
    root html
    index index.html index.htm
}

staje się:

root html
index index.html index.htm

Ponadto blok php jest nieprawidłowo skonfigurowany. Zobacz odpowiedź Michaela Hamptonsa na właściwą drogę.

Dodatkowa uwaga może być taka, że ​​jeśli php5-fpm jest skonfigurowany do używania gniazd, wskaż parametr fastcgi_pass w bloku php w nginx.conf do ustawień gniazd w /etc/php5/fpm/pool.d/www.conf.


2

Właśnie miałem ten problem w nowej wersji nginx. (konfiguracja pochodzi ze starszej wersji)

To, co musiałem zrobić, to umieścić include fastcgi_params;wyżej mój zwyczaj w SCRIPT_FILENAMEnastępujący sposób:

location @web {
        try_files $uri =404;
        include         fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;
}

W SCRIPT_FILENAMEtrakcie nadpisywania.


1

Jeśli używasz aliasów w blokach lokalizacji, nieobsługiwany błąd 404 może również wykazywać to zachowanie. Możesz to zobaczyć, jeśli strona wyświetlana w przeglądarce jest prostym tekstem „Nie znaleziono pliku” w przeciwieństwie do ładniej sformatowanej (wyśrodkowanej) strony nginx 404. Zasadniczo mówi to, że nie można znaleźć strony 404.

Aby rozwiązać, dodaj dodatkową try_files $uri =404linię do bloku lokalizacji i ponownie załaduj konfigurację nginx. Oprócz tego, co powiedział Michael Hampton o rozwiązaniu określonej luki w zabezpieczeniach , pozwala to również programowi obsługi fastcgi na przesłonięcie definicji aliasu i znalezienie skryptu 404 w domyślnej lokalizacji.


1
sudo vim /etc/php-fpm.conf

o linii 149, zmień php user && user group

Testuję to teraz pomyślnie.


To jest właściwy sposób! Hej, możesz spróbować!
Miłość

Kiedy zmieniasz użytkownika i grupę, nie zapomnij zrestartować php-fpm. Jeśli używasz centos6, możesz użyć tego polecenia: sudo service php-fpm restart
Love

0

Widziałem :

FastCGI wysłał stderr: „Główny skrypt nieznany” podczas odczytywania nagłówka odpowiedzi z góry

na serwerze postawiłem pod dużym obciążeniem podczas testów warunków skrajnych. Podejrzewam, że muszę jeszcze potwierdzić, że wyczerpały się dostępne uchwyty plików z systemu operacyjnego. W takim przypadku php-fpm nie może uzyskać odniesienia do pliku.

Zdaję sobie sprawę, że jest to spekulacyjne, ale z pewnością pasuje do mojego scenariusza i może również pomóc komuś innemu.


0

Dzięki @homeway, Twoja odpowiedź mnie inspiruje. Dziękuję Ci bardzo!

Spełniam to samo pytanie, ale inna metoda nie pomogła mi rozwiązać pytania!

Rozwiązuję to, uważam, że kluczem jest: Linux User Right prowadzi do pytania: FastCGI wysłany w stderr: „Podstawowy skrypt nieznany”

Ponieważ domyślnym użytkownikiem PHP-FPM: grupa jest apache: apache, ale katalogiem kodu jest someBody: someBody. Dlatego powinieneś zmienić prawo użytkownika!

Piszę blog, aby rozwiązać to pytanie. Możesz zobaczyć tego bloga:

[Nginx FastCGI wysłany w stderr: „Podstawowy skrypt nieznany”] [1] „[1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.