Nginx + php5-fpm = "File non trovato"


14

Ho colpito un muro durante l'impostazione di un sito utilizzando nginx / fpm. La pagina visualizza "File non trovato", e questo appare nel nginx error.log:

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

Sono nuovo sia per nginx che per fpm, e quel messaggio di errore non significa nulla per me (anche la macchina di Google non mi ha aiutato!). Qualcuno può far luce su ciò che potrebbe accadere?


Potresti aggiungere la parte della tua configurazione nginx dove definisci la gestione di PHP?
Christopher Perrin,

Per me il seguente articolo ha aiutato: nginxlibrary.com/resolving-no-input-file-specified-error . Generalmente questo errore si presenta se c'è un problema con SCRIPT_FILENAME.
white_gecko,

Risposte:


18

Dovresti avere una locationsezione per gestire le richieste PHP configurate in modo simile a questo:

    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;
    }

(Il supplemento try_filesrisolve una vulnerabilità di sicurezza che potrebbe consentire l'esecuzione di file arbitrari come PHP.)

Inoltre, è rootnecessario definirlo nella serversezione del file di configurazione, non nella locationsezione. Questa è una delle configurazioni errate nginx più comuni .


+1 per quell'articolo di configurazione errata - merita davvero una lettura, soprattutto se stai imparando Nginx. Ben scritto, entry-level, con molti ottimi consigli!
Ben

2

Questa è una nota per le installazioni dei passeggeri.

Ho appena installato nginx dalla fonte tramite passeggero che ha causato un problema con php5-fpm. Il nginx.conf predefinito utilizza il problema descritto da Michael Hampton. La soluzione è rimuovere il blocco attorno alle direttive radice e indice, quindi:

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

diventa:

root html
index index.html index.htm

Inoltre, il blocco php non è impostato correttamente. Vedi la risposta di Michael Hamptons per il modo corretto.

Un'ulteriore nota potrebbe essere che se php5-fpm è impostato per usare i socket puntare il parametro fastcgi_pass nel blocco php in nginx.conf alla configurazione del socket in /etc/php5/fpm/pool.d/www.conf.


2

Ho appena avuto questo problema in una nuova versione di nginx. (configurazione presa da una versione precedente)

Quello che dovevo fare era posizionare include fastcgi_params;sopra la mia abitudine in SCRIPT_FILENAMEquesto modo:

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

Come SCRIPT_FILENAMEveniva sovrascritto.


1

Se si utilizzano alias nei blocchi di posizione, anche un errore 404 non gestito può presentare questo comportamento. Puoi vederlo se la pagina visualizzata nel browser è il semplice testo "File non trovato" rispetto alla pagina nginx 404 formattata (centrata) più carina. In sostanza, sta davvero dicendo che la pagina 404 non può essere trovata.

Per risolvere, aggiungi una try_files $uri =404riga aggiuntiva nel tuo blocco di posizione e ricarica la configurazione di nginx. Oltre a quanto affermato da Michael Hampton sulla risoluzione di una specifica vulnerabilità della sicurezza , ciò consente al gestore fastcgi di ignorare la definizione di alias e di trovare lo script 404 nella posizione predefinita.


1
sudo vim /etc/php-fpm.conf

circa 149, cambia utente php && gruppo utenti

L'ho provato con successo ora.


Questo è il modo giusto! Ehi amico, puoi provarlo!
Amore

Quando cambi utente e gruppo, non dimenticare di riavviare php-fpm. Se usi centos6 puoi usare questo comando: sudo service php-fpm restart
Love

0

Ho visto :

FastCGI ha inviato stderr: "Script primario sconosciuto" durante la lettura dell'intestazione di risposta dall'upstream

in un server ho messo sotto carico elevato durante lo stress test. Il mio sospetto, ancora da confermare, è che gli handle di file disponibili dal sistema operativo siano esauriti. Nel qual caso php-fpm non può ottenere un riferimento al file.

Mi rendo conto che questo è speculativo ma sicuramente si adatta al mio scenario e potrebbe anche aiutare qualcun altro.


0

Grazie @homeway, la tua risposta mi ispira. Grazie mille!

Incontro la stessa domanda, ma Altro metodo non mi ha aiutato a risolvere la domanda!

Lo risolvo, trovo che la chiave sia: diritto utente Linux porta alla domanda: FastCGI ha inviato stderr: "Script primario sconosciuto"

Perché l'utente predefinito PHP-FPM: group è apache: apache, ma la tua dir del codice è someBody: someBody. Quindi dovresti cambiare l'utente nel modo giusto!

Scrivo un blog per risolvere questa domanda, puoi vedere questo blog:

[Nginx FastCGI ha inviato stderr: "Script primario sconosciuto"] [1] `[1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.