2013-07-21 14 views
10

sto usando questa configurazione su una nuova installazione di PHP5-fpm e nginx su ubuntu 13.04: phpmiei nginx + FastCGI download configurazione di PHP file invece di eseguire loro

server { 
    listen 80 default_server; 
    listen [::]:80 default_server ipv6only=on; 

    root /usr/share/nginx/html; 
    index index.php index.html index.htm; 

    server_name localhost; 

    location/{ 
      try_files $uri $uri/ /index.html; 
    } 

    location /doc/ { 
      alias /usr/share/doc/; 
      autoindex on; 
      allow 127.0.0.1; 
      allow ::1; 
      deny all; 
    } 

    error_page 404 /404.html; 

    location ~ \.php$ { 
      fastcgi_split_path_info ^(.+\.php)(/.+)$; 
      # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini 

      # With php5-cgi alone: 
      fastcgi_pass 127.0.0.1:9000; 
      # With php5-fpm: 
      fastcgi_pass unix:/var/run/php5-fpm.sock; 
      fastcgi_index index.php; 
      include fastcgi_params; 
    } 
} 

Ma, il mio browser web è vedere come testo invece dei risultati eseguiti. Dove dovrei cercare di risolvere il problema?

risposta

8

Il codice php viene visualizzato direttamente perché non viene inviato al motore php, ovvero il blocco della posizione viene abbinato e il file php viene servito, ma il file php non viene catturato dal blocco php , quindi il tuo problema è nel blocco php.

In questo blocco si dispone di 2 fastcgi_pass, uno con una porta (9000) e l'altro in un socket unix, non è possibile avere entrambi insieme, ma dal momento che hai codificato la domanda con fastcgi quindi presumo si utilizza FastCGI, provare commentando questa linea

#fastcgi_pass unix:/var/run/php5-fpm.sock; 
+0

che era strano. Sono stato in grado di vedere che fastcgi era in esecuzione ma non riuscivo a ottenere l'output php utilizzando una delle due linee per la connessione. Ho reinstallato tutto e seguito questa guida (http://askubuntu.com/questions/134666/what-is-the-easiest-way-to-enable-php-on-nginx) e tutto sembra funzionare. Grazie! – arby

2

suona come hai trovato il torto Content-Type intestazione set. Puoi verificarlo con vari strumenti. Ad esempio, apri la scheda "Rete" Strumenti di sviluppo in Chrome, quindi richiedi la pagina. Vedrai il "Tipo di contenuto" restituito in una delle colonne e puoi fare clic sulla richiesta nella colonna di sinistra per visualizzare le intestazioni di risposta complete. Sospetto che troverai che l'intestazione che viene restituita è "text/plain" o "application/octet-stream" invece di text/html, che probabilmente vorrai.

Nginx di solito imposta un'intestazione Content-Type predefinita in base all'estensione. Questo viene fatto con la direttiva types, che non vedo sopra menzionata, quindi potresti voler controllare le tue impostazioni lì per confermare che l'estensione php è mappata a text/html. Potrebbe anche essere utile impostare esplicitamente un'intestazione Content-Type nell'applicazione.

0

sono stato in grado di risolvere questo problema aggiornando il mio nginx vhost modificando

default_type application/octet-stream;

a

default_type text/html;

Problemi correlati