Nginx + Php5-fpm non esegue il rendering dei file php


8

Ho passato ore a capire come installare Nginx + Ruby Enterprise Edition + PHP5-fpm e MYSQL, finalmente è tutto installato e sembra che tutto sia iniziato bene.

Ma per qualche ragione i file php non vengono elaborati.

I file .html funzionano bene, ma quando provo a visualizzare un file .php sembra che non esista, anche se lo è. È interessante notare che quando provo a visualizzare un file .html che non esiste ottengo un bel messaggio Nginx 404, ma quando visualizzo un file .php non me lo dà nemmeno.

Quindi, per la mia comprensione da principiante, sembra che ci sia qualcosa di sbagliato nella configurazione, o Nginx e PHP-fpm non stanno parlando tra loro.

Ho esaminato tanti altri esempi di file di configurazione di nginx e sono sicuro che il lato delle cose va bene. Bene ... ecco comunque il bit rilevante del file conf:

location ~ \.php$ {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
   include fastcgi_params;
 }

E

    fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffer_size 128k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;

Qualsiasi aiuto è molto apprezzato.

modifica : Ecco le intestazioni restituite dal file php di prova " http://eman.id.au/test.php ":

HTTP/1.1 404 Not Found =>
Server => nginx/0.8.54
Date => Thu, 16 Dec 2010 19:30:30 GMT
Content-Type => text/html
Connection => close
X-Powered-By => PHP/5.3.2-1ubuntu4.5ppa5~lucid1

Risposte:


10

Credo di aver riscontrato esattamente lo stesso problema oggi, nginx invia la richiesta a php-fpm (come indicato nell'intestazione) eppure ottieni un 404, anche se il file esiste e non presenta alcun errore (PHP / sintassi), e nessun errore appare in alcun registro (ngins o php-fpm).

Non hai incluso la tua configurazione completa di nginx, ma è possibile che tu non abbia l'opzione "root" (correttamente?) Nella sezione "server"? Devi assicurarti di farlo, che punti nella giusta posizione ofc e che sia all'interno della sezione "server", non all'interno di una "posizione", ad esempio:

server {
    root /var/www/eman;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
        include fastcgi_params;
    }
}

Non ne sono certo, ma potrebbe essere stato questo il problema
Emmanuel,

Ho finito per ricostruire il VPS e riprovare usando diversi tutorial, e ora funziona bene. :)
Emmanuel,

Questo ha funzionato per me e stavo usando un socket unix per il parametro fastcgi_pass
Sean

1

Se dai un'occhiata alle intestazioni con cui http://eman.id.au/test.php risponde allora vedrai X-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1. Non lo mostrerebbe se la richiesta non fosse passata a PHP. Inoltre, se PHP non riesce a trovare il percorso del file passato ad esso, farà eco l'erroreNo input file specified.

Dal momento che il tuo sito genera l'output basato sull'intestazione e non presenta l' No input file specified.errore, il motivo più probabile è che hai un errore nello script PHP e che gli errori di visualizzazione sono disattivati. Ciò comporta una pagina vuota e una voce nel registro degli errori, quindi dai un'occhiata lì e vedi se non si sta riempiendo.


Ah, così fa !! Stavo visualizzando la pagina in Google Chrome e mi stava dando un errore 404, ma l'ho appena vista in Firefox ed è solo una pagina vuota. Non ci sono errori nello script php. In effetti ho appena preso tutto il php da esso e l'unico contenuto di esso è un tag h1
Emmanuel

Ho aggiornato il mio post originale con le intestazioni http del file test.php
Emmanuel

E sei assolutamente certo che i tuoi script si trovano in / var / www / eman / e che il percorso e i file siano leggibili ed eseguibili dal processo PHP?
Martin Fjordvald,

Sì, sono gli script sicuramente in / var / www / eman / il file test.php è nella stessa directory di index.html che funziona bene. Cosa devo controllare per assicurarmi che siano leggibili ed eseguibili dal processo PHP ??? Non ne sono sicuro?
Emmanuel,

Bene, spawn PHP in qualche modo tramite spawn-fcgi o php-fpm, il file di configurazione o il comando usato per spawn dovrebbe contenere l'utente del processo, dopodiché dovrai controllare l'autorizzazione di Linux per quell'utente.
Martin Fjordvald,

0

Paio di pensieri:

   fastcgi_param SCRIPT_FILENAME /var/www/eman$fastcgi_script_name;

Questo ha bisogno di una barra in più

   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;

NGINX ha anche una strana cosa di cache, quindi quando provi l'URL nel tuo browser, aggiungi un? Random = 12391 alla fine per forzare un aggiornamento. Sono stato perplesso per 30 minuti su una configurazione solo per scoprire che stava funzionando da sempre, ma ero inciampato nella cache.

Probabilmente vuoi anche sfuggire alla tua posizione un po 'meglio (anche se questo non sta causando questo problema che stai riscontrando) È una pratica migliore:

location ~ .php$

per

location ~ \.php$

.php $ corrisponderebbe a una richiesta come yourpagephp piuttosto che solo yourpage.php


Ok, ho modificato i file conf, ma non ho avuto fortuna ...
Emmanuel,

L'URL è: eman.id.au/test.php, eman.id.au stesso funziona perfettamente su index.html
Emmanuel

La cosa della cache non è vera, Nginx non memorizza nella cache tutto ciò che non gli viene specificamente indicato. Tuttavia, NON è come Apache, per modificare il file di configurazione è necessario ricaricare il file di configurazione. Inoltre, il browser memorizzerà le richieste nella cache, quindi è ciò che potresti confonderlo.
Martin Fjordvald,
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.