2013-07-21 7 views
10

Ich verwende diese Konfiguration auf einem frischen php5-fpm und nginx installieren von Ubuntu 13.04:My nginx + fastcgi Konfiguration Downloads PHP-Dateien anstelle der Ausführung sie

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

Aber, mein Web-Browser sieht php als Text anstelle der ausgeführten Ergebnisse. Wo soll ich nach Fehlern suchen?

Antwort

8

Ihr PHP-Code wird direkt angezeigt, weil er nicht an die PHP-Engine gesendet wird, dh der Standortblock wird abgeglichen und die PHP-Datei wird geliefert, aber die PHP-Datei wird nicht vom PHP-Block erfasst Das Problem liegt also im PHP-Block.

In diesem Block haben Sie 2 fastcgi_pass, eine mit einem Port (9000) und die andere zu einem Unix-Socket, Sie können nicht beide zusammen haben, aber da Sie Ihre Frage mit fastcgi markiert haben, nehme ich an Verwenden Sie fastcgi, versuchen Sie, diese Zeile zu kommentieren.

+0

Das war seltsam zu ändern. Ich konnte sehen, dass fastcgi lief, aber ich konnte nicht php-Ausgabe mit beiden Linien zu verbinden. Ich habe alles neu installiert und folgte diesem Leitfaden (http://askubuntu.com/questions/134666/what-ist-the-easiest-way-to-enable-php-on-nginx) und alles scheint zu funktionieren. Vielen Dank! – arby

2

Es klingt, als ob Sie den falschen Content-Type-Headersatz erhalten. Sie können dies mit verschiedenen Tools überprüfen. Öffnen Sie beispielsweise den Entwickler-Tab "Netzwerk" in Chrome und fordern Sie dann die Seite an. Sie sehen den "Inhaltstyp", der in einer der Spalten zurückgegeben wird, und Sie können auf die Anforderung in der linken Spalte klicken, um die vollständigen Antwort-Header anzuzeigen. Ich vermute, dass Sie finden, dass die zurückgegebene Kopfzeile entweder "text/plain" oder "application/octet-stream" statt text/html ist, was Sie wahrscheinlich wollen.

Nginx setzt normalerweise einen Standard-Content-Type-Header basierend auf der Erweiterung. Dies geschieht mit der types Direktive, die ich oben nicht erwähnt habe, also möchten Sie vielleicht Ihre Einstellungen dort überprüfen, um zu bestätigen, dass die PHP Erweiterung zu text/html zugeordnet ist. Das explizite Festlegen eines Headers Content-Type in Ihrer Anwendung kann ebenfalls hilfreich sein.

0

Ich konnte dies meine nginx vHost durch die Aktualisierung beheben, indem

default_type application/octet-stream;

zu

default_type text/html;