Warum werden die PHP-Dateien heruntergeladen anstatt von Nginx verarbeitet?

12

Ich habe das gleiche Problem gesehen, und viele Auflösungen dafür deuteten darauf hin, den Typ-Handler hinzuzufügen, aber das war für Apache.

Ich verwende Arch Linux, Nginx, PHP und PHP-FMP und kann nicht herausfinden, warum PHP-Dateien heruntergeladen werden, anstatt ausgeführt zu werden.

Hier ist meine nginx.conf:

#user http;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            try_files $uri =404;
        root           html;
            fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

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

    server {
    listen  80;
    server_name arch;
    access_log  /srv/http/arch/logs/access.log;
    error_log   /srv/http/arch/logs/error.log;
    location / {
        root    /srv/http/arch/httpdocs;
        index   index.html;
    }
    }

}

Bearbeiten, um mime.types-Datei hinzuzufügen:

types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/x-javascript              js;
    application/atom+xml                  atom;
    application/rss+xml                   rss;

    text/mathml                           mml;
    text/plain                            txt;
    text/vnd.sun.j2me.app-descriptor      jad;
    text/vnd.wap.wml                      wml;
    text/x-component                      htc;

    image/png                             png;
    image/tiff                            tif tiff;
    image/vnd.wap.wbmp                    wbmp;
    image/x-icon                          ico;
    image/x-jng                           jng;
    image/x-ms-bmp                        bmp;
    image/svg+xml                         svg;

    application/java-archive              jar war ear;
    application/mac-binhex40              hqx;
    application/msword                    doc;
    application/pdf                       pdf;
    application/postscript                ps eps ai;
    application/rtf                       rtf;
    application/vnd.ms-excel              xls;
    application/vnd.ms-powerpoint         ppt;
    application/vnd.wap.wmlc              wmlc;
    application/vnd.google-earth.kml+xml  kml;
    application/vnd.google-earth.kmz      kmz;
    application/x-7z-compressed           7z;
    application/x-cocoa                   cco;
    application/x-java-archive-diff       jardiff;
    application/x-java-jnlp-file          jnlp;
    application/x-makeself                run;
    application/x-perl                    pl pm;
    application/x-pilot                   prc pdb;
    application/x-rar-compressed          rar;
    application/x-redhat-package-manager  rpm;
    application/x-sea                     sea;
    application/x-shockwave-flash         swf;
    application/x-stuffit                 sit;
    application/x-tcl                     tcl tk;
    application/x-x509-ca-cert            der pem crt;
    application/x-xpinstall               xpi;
    application/xhtml+xml                 xhtml;
    application/zip                       zip;

    application/octet-stream              bin exe dll;
    application/octet-stream              deb;
    application/octet-stream              dmg;
    application/octet-stream              eot;
    application/octet-stream              iso img;
    application/octet-stream              msi msp msm;

    audio/midi                            mid midi kar;
    audio/mpeg                            mp3;
    audio/ogg                             ogg;
    audio/x-realaudio                     ra;

    video/3gpp                            3gpp 3gp;
    video/mpeg                            mpeg mpg;
    video/quicktime                       mov;
    video/x-flv                           flv;
    video/x-mng                           mng;
    video/x-ms-asf                        asx asf;
    video/x-ms-wmv                        wmv;
    video/x-msvideo                       avi;
}
Shane Grant
quelle
1
Bitte zeigen Sie uns die Ausgabe von nginx -Vund php-fpm -m?
Quanten

Antworten:

6

Anmerkung zum Hinzufügen:

Ich habe den gleichen Deal durchgemacht, aber nachdem ich den Fix angewendet habe, war die alte Tastenkombination Strg + Umschalt + R nicht gut genug, um den Cache des Browsers zu aktualisieren, dass es sich bei der Seite um einen Download handelt.

Nachdem der Cache gründlicher gelöscht wurde, funktionierte er wie erwartet.

rm-vanda
quelle
1
Ich habe alles versucht und aus dem Nichts kommt deine "Notiz zum Hinzufügen" ... Ich habe mir nur einige qualvolle Stunden erspart. Vielen Dank für den Hinweis :)
RonzyFonzy
Groß - ! Ich bin froh, dass es geholfen hat ^ _ ^
rm-vanda
4

Ich konnte dieses Problem beheben, aber das Problem, das ich hatte, schien damit zu zusammenhängen, dass ich immer noch Apache-Setup auf dem Server hatte, und ein Teil von Apache widersprach der Fähigkeit von Nginx, PHP-Seiten zu bedienen, obwohl Apache lief nicht.

Wenn Sie auf dasselbe Problem stoßen, versuchen Sie, Apache, PHP und alle zugehörigen Module zu entfernen und installieren Sie genau das, was Sie benötigen.

Shane Grant
quelle
2

Enthält diese Datei etwas?

(einschließlich mime.types;)

Denn wenn nicht, erhalten alle Ihre Dateien den Mime / Typ einer Download-Datei

(default_type application / octet-stream;)

das ist also dein problem, weil php nicht auf der liste steht

Lösung: Fügen Sie diese Zeile zu dieser Datei hinzu und starten Sie ngnix neu

text/php                             php php5;
elibyy
quelle
Ja, hat es dem ursprünglichen Beitrag hinzugefügt
okay, ich habe die PHP-MIME / Typ hinzugefügt, die Sie der Datei hinzufügen sollten
Vielen Dank für die Zeit, aber nach dem Neustart von Nginx funktioniert es immer noch nicht. Gibt es noch andere Ideen, die ich ausprobieren könnte?
Lesen Sie diese Anleitung unter adityo.blog.binusian.org/?p=428 und vergewissern Sie sich, dass Sie alle Schritte richtig gemacht haben
Ich benutze Arch Linux, so dass diese Seite nicht allzu viel miteinander vergleicht. Hier ist die Seite, die ich benutzt habe: wiki.archlinux.org/index.php/…
1

Beachten Sie, dass Ihre Konfiguration als ineffizient und möglicherweise unsicher gilt. Siehe https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/

Dayo
quelle
1
Hallo, das stimmt nicht. Try_files setzt nur den internen URI-Zeiger und setzt dann die Verarbeitung des Standortblocks fort. Wenn Sie am selben Ort an PHP senden, ist das vollkommen in Ordnung.
Martin Fjordvald
Tatsächlich. Bearbeitet die Antwort, um falsche Informationen zu entfernen
Dayo
0

Mein Standort ~ .php sieht so aus. Warum versuchst du es nicht?

location ~ \.php {
        try_files $uri =404; #This line closes a big security hole
                             #see: http://forum.nginx.org/read.php?2,88845,page=3
        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;

        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;

        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx;

        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;

        fastcgi_pass 127.0.0.1:9000;
}

Gehe auch zu /etc/php/php-fpm.conf und versuche:

listen = 127.0.0.1:9000
;listen = /var/run/php-fpm/php-fpm.sock
George Tasioulis
quelle
Ich habe gerade versucht, es lädt immer noch die Datei.
Shane Grant
@ShaneGrant Ein Benutzer von arch bbs hat dasselbe Problem mit Ihnen und hat es gelöst, indem er Apache und PHP (aus einem früheren Setup) entfernt und Nginx und PHP erneut installiert hat. Überprüfen Sie dies heraus: Link
George Tasioulis
0

Führen Sie den folgenden Befehl aus:

sudo apt-get install php-gettext
sudo nano /etc/nginx/sites-available/default

Vergleichen Sie den folgenden Code mit Ihrer defaultDatei:

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/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
  • Remove cache von Ihrem Browser
  • Starten Sie Nginx neu

sudo systemctl starte nginx neu

Sanaulla
quelle