it-swarm.com.de

Nginx stellt .php-Dateien als Downloads bereit, anstatt sie auszuführen

Ich installiere eine Website in einem Droplet (Digital Ocean). Ich habe ein Problem bei der Installation von NGINX mit PHP. Ich habe ein Tutorial gemacht https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04 aber wenn ich Versuchen Sie, eine .php-Datei auszuführen, es wird nur heruntergeladen ... Zum Beispiel ... http://5.101.99.123/info.php es funktioniert, aber ... Wenn ich zum Hauptcode http://5.101.99.123 gehe, wird mein index.php heruntergeladen: /

Irgendeine Idee?

-rw-r--r--  1 agitar_user www-data   418 Jul 31 18:27 index.php
-rw-r--r--  1 agitar_user www-data    21 Aug 31 11:20 info.php

Mein/etc/nginx/sites-available/default

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

        root /var/www/html;
        index index.html index.htm index.php;

        # Make site accessible from http://localhost/
        server_name agitarycompartir.com;

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


              location / {

                    try_files $uri $uri/ =404;
                    # Uncomment to enable naxsi on this location
                    # include /etc/nginx/naxsi.rules
            }

... Andere "Standort" sind kommentiert (#)

102
Apeiron

Versuche dies:

  1. /etc/nginx/sites-available/default bearbeiten

  2. Kommentieren Sie beide Abhörzeilen, um den Port 80 IPv4 und IPv6 zu überwachen.

    listen   80; ## listen for ipv4; this line is default and implied
    listen   [::]:80 default_server ipv6only=on; ## listen for ipv6
    
  3. Lass server_name in Ruhe

    # Make site accessible (...)
    server_name localhost;
    
  4. Fügen Sie index.php zur Zeile index hinzu

    root /usr/share/nginx/www;
    index index.php index.html index.htm;
    
  5. Unkommentiert location ~ \.php$ {}

    # pass the PHP scripts to FastCGI server listening on (...)
    #
    location ~ \.php$ {
            try_files $uri =404;
            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;
    }
    
  6. Bearbeiten Sie /etc/php5/fpm/php.ini und stellen Sie sicher, dass cgi.fix_pathinfo auf 0 eingestellt ist.

  7. Starten Sie nginx und php5-fpm neu (wenn Sie nicht wissen, wie das geht, starten Sie den Server neu)


Ich habe gerade vor einer Woche mit Linux angefangen und hoffe, dass ich Ihnen dabei helfen kann. Ich verwende Nano-Texteditor zum Bearbeiten der Dateien. Führen Sie apt-get install nano aus, wenn Sie es nicht haben. Google darauf, um mehr zu erfahren.

101
Jack M.

Sie müssen dies zu/etc/nginx/sites-enabled/default hinzufügen, um PHP-Dateien auf Nginx Server auszuführen:

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

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

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

Ich hatte ein ähnliches Problem, das durch das Leeren des Browser-Cache gelöst wurde (funktionierte auch mit anderen Browsern).

19
np8

Update nginx config/etc/nginx/sites-available/default oder Ihre Konfigurationsdatei

wenn Sie PHP 7 verwenden, verwenden Sie dies 

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;      
    }

wenn Sie PHP 5 verwenden, verwenden Sie dies 

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }

Besuchen Sie hier für vollständige Details Details hier

11
M Arfan

Das hat für mich gearbeitet.

1) MyApp-Datei

vi/etc/nginx/sites-available/meineAnwendung

server {
  listen 80;
  listen [::]:80;

  root /var/www/myApp;
  index index.php index.html index.htm;

  location ~ \.php$ {
      try_files $uri =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass unix:/run/php/php7.0-fpm.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
      }
}

PHP5-Benutzer

Veränderung

fastcgi_pass unix:/run/php/php7.0-fpm.sock;

zu

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

2) cgi.fix_pathinfo konfigurieren

Setzen Sie cgi.fix_pathinfo auf 0

Ort:

PHP5 /etc/php5/fpm/php.ini

PHP7 /etc/php/7.0/fpm/php.ini


3) Dienste neu starten

FPM

php5 Sudo service php5-fpm restart

php7 Sudo service php7.0-fpm restart

NGINX

Sudo service nginx restart
6

Ich hatte das gleiche Problem und keine der Antworten löste das Problem. 

Ich rannte:

Sudo nginx -t

um die Konfigurationsdatei unter/etc/nginx/sites-available/default zu testen. 

Es gab mir diese Fehler:

nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/sites-enabled/default:115
nginx: configuration file /etc/nginx/nginx.conf test failed

Also ging ich in die Konfigurationsdatei und in der letzten Zeile war es 

#}

Ich kommentierte den Testbefehl erneut und es funktionierte

Wenn eine der vorgeschlagenen Antworten nicht funktioniert, versuchen Sie Folgendes:

1.fix www.conf in etc/php5/fpm/pool.d:

listen = 127.0.0.1:9000;(delete all line contain listen= )

2.fix nginx.conf in usr/local/nginx/conf:

remove server block server{} (if exist) in block html{} because we use server{} in default (config file in etc/nginx/site-available) which was included in nginx.conf.

3. Korrigieren Sie die Standarddatei in etc/nginx/site-available

location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; }

4. Starten Sie den Nginx-Dienst neu

Sudo-Dienst nginx Neustart

5. Starten Sie den PHP-Dienst neu

dienst php5-fpm Neustart

6.genießen

Erstellen Sie eine beliebige PHP-Datei in/usr/share/nginx/html und führen Sie sie in "servername/dateiname.php" aus (servername hängt von Ihrer Konfiguration ab, normalerweise ist dies localhost, dateiname.php ist der Name der Datei, die in/usr/share/nginx erstellt wurde/html).

Ich benutze Ubuntu 14.04

3
huuthang

Für mich war es hilfreich, ?$query_string am Ende von /index.php wie folgt hinzuzufügen:

location / {
        try_files $uri $uri/ /index.php?$query_string;
}
3
Tomeg

Ich sehe viele Lösungen oben und viele funktionierten für mich richtig, aber ich verstand nicht, was sie taten, und machte mir Sorgen, nur den Code einzufügen, insbesondere fastcgi. Also hier sind meine 2 Cent,

  1. nginx ist ein web browser (und kein application browser) und kann daher nur statische Seiten liefern.
  2. wenn wir versuchen, eine .php-Datei, z. B. index.php, zu rendern/zurückzugeben, weiß nginx nicht, was zu tun ist, da es eine .php -Datei (oder überhaupt keine) versteht Erweiterung, abgesehen von einigen wenigen Ausdrücken wie .html, .js usw., bei denen es sich um statische Dateien handelt)
  3. Um andere Arten von Dateien ausführen zu können, benötigen wir etwas, das zwischen Nginx und der Anwendung (hier der PHP-Anwendung) liegt. Hier kommt das Common Gateway Interface (CGI) zum Einsatz. Es ist eine Software, die diese Kommunikation verwaltet. CGIs können in jeder möglichen Sprache implementiert werden: Python (uWSGI), PHP (FPM) und sogar C. FastCGI ist im Grunde eine aktualisierte Version von CGI, die viel schneller als CGI ist. 

Für einige Server wie Apache gibt es eine integrierte Unterstützung für die Interpretation von PHP, sodass keine CGI erforderlich ist.

Dieser Digital Ocean-Link erklärt die Schritte zum Installieren von FPM ziemlich gut, und ich schreibe nicht die Schritte, die erforderlich sind, um das Problem der PHP-Dateien zu lösen, die heruntergeladen werden, statt zu rendern, da die anderen Antworten meiner Meinung nach ziemlich gut sind.

2
coda

Die Antwort oben schien für die Lösung, die ich erreichte, zu viel zu kommentieren. So sah meine Akte aus:

/ etc/nginx/sites-available/default

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

Hoffe, das hilft einigen Leuten, die an einem Sonntagnachmittag frustriert sind (c:

2

In meinem Fall habe ich /etc/nginx/sites-available/default nicht verwendet. Ich verwendete eine andere Serverblock-Konfigurationsdatei (z. B. example.com). Die einzige Möglichkeit, dieses Problem zu beheben, besteht darin, die symbolische Verknüpfung der Standardserverblock-Konfigurationsdatei zu entfernen:

$ rm /etc/nginx/sites-enabled/default

laden Sie dann Nginx neu:

$ Sudo systemctl reload nginx
1
Waqleh

Meine Lösung war hinzuzufügen 

    location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

zu meiner benutzerdefinierten Konfigurationsdatei, zum Beispiel etc/nginx/sites-available/example.com.conf

Das Hinzufügen zu /etc/nginx/sites-available/default hat für mich nicht funktioniert.

1

Für mich war es die Zeile: fastcgi_pass unix: /var/run/php5-fpm.sock; 

das musste nur sein: fastcgi_pass unix: /run/php5-fpm.sock;

0
Dongato

Kommentieren Sie die .php-Position in/etc/nginx/sites-available/default

Sudo vi/etc/nginx/sites-available/default:

location ~ \.php$ {
            include snippets/fastcgi-php.conf;

            # With php5-cgi alone:
    #       fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

Ich hatte das gleiche Problem, was gelöst wurde. Dieser Serverblock hatte auch diesen Block über anderen Standortblöcken, wenn css Probleme nicht geladen hat. Die ich meiner zu meiner Site verfügbaren Conf-Datei hinzugefügt habe. 

location ~ [^/]\.php(/|$) {
fastcgi_split_path_info  ^(.+\.php)(/.+)$;
fastcgi_index            index.php;
fastcgi_pass             unix:/var/run/php/php7.3-fpm.sock;
include                  fastcgi_params;
fastcgi_param   PATH_INFO       $fastcgi_path_info;
fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
0
Alex M

Das ist es also, was sich in meinem Fall schließlich als Umschreiberegeln für den Schuldigen erwiesen hat
Ich habe die Nginx Rewrite-Regeln wie folgt geändert.

   location /vendors { rewrite ^/vendors/?$ /vendors.php break; } 

wird...

  location /vendors { rewrite ^/vendors/?$ /vendors.php last; }

Anscheinend wurde die Anfrage ohne das Schlüsselwort last nicht neu gestartet, sodass sie nie das .php location-Segment erreichte und einfach als Download interpretiert wurde.

0

Wenn dir sonst nichts hilft. Und vielleicht haben Sie Apache2 bereits mit der Testdatei info.php installiert. Löschen Sie einfach die App-Daten (Cache, Cookie) für localhost.

0
Al Che

Überprüfen Sie, ob Ihre Nginx-Konfigurationsdateierweiterung * .conf ist.
zum Beispiel: /etc/nginx/conf.d/myfoo.conf 

Ich habe die gleiche Situation. Nachdem ich meine config-Datei von myfoo in myfoo.conf umbenannt habe, wurde sie behoben.

0
Ivan

Für alle, die dasselbe Problem mit PHP 7 haben, habe ich Folgendes getan, damit Nginx PHP-Dateien ordnungsgemäß in CentOS 7 ausführt. Hier finden Sie Informationen, falls jemand dasselbe Problem hat:

  • Folgen Sie diesem Dokument Schritt für Schritt auf Digital Ocean .

  • Öffnen Sie den /etc/nginx/conf.d/default.conf (standardmäßig stehen keine Sites zur Verfügung, noch Sites, die Sie bearbeiten können.).

  • Bearbeiten Sie den Parameter location wie folgt:

default.conf

location ~ \.php$ {
    try_files $uri =404;
    #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;

    #instruct nginx execute php7 files instead download them :D
    fastcgi_pass unix:/var/run/php-fpm/www.sock;

    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
  • Starten Sie die Dienste Nginx und PHP Sudo systemctl restart php-fpm und Sudo systemctl restart nginx neu.

  • Der allerletzte, klare Browser-Cache oder das Ausführen in incognito (Chrome) oder Private Browsing (Firefox) etc ... 

Hoffe das hilfreiche und glückliche Programmieren

0
SonDang

Ich wollte gerade versuchen, das Problem zu beheben. Für mich bestand das Problem darin, dass Cloudflare die PHP-Datei zwischengespeichert hatte und mich ständig dazu brachte, sie herunterzuladen.

Die Lösung für mich bestand darin, den Cache von Cloudflare zu leeren.

0
KristinnVikarJ

Ich habe mein Problem jetzt mit diesem Code gelöst (ändere deine IP):

location / {
access_log off;
    log_not_found  off;
    client_max_body_size    2000m;
    client_body_buffer_size 512k;
    proxy_buffering on;
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;
    proxy_buffer_size 64k;
    proxy_buffers 32 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_connect_timeout 300s;
    proxy_http_version 1.1;
    proxy_set_header Range "";
    proxy_pass   https://123.123.123.123:444;
    proxy_set_header   Host   $Host;
    proxy_set_header   X-Real-IP  $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
    proxy_redirect     off;
}
0
André Bastos

Zuerst müssen Sie in Ihrem Browser Remove cache eingeben

Öffnen Sie dann das Terminal und führen Sie den folgenden Befehl aus: 

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

Fügen Sie dann den folgenden Code in die default-Datei ein:

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

Bei Unstimmigkeiten korrigieren Sie einfach Nginx vom Terminal mit dem folgenden Befehl

Sudo systemctl nginx neu starten

Dann gehe zum Browser und genieße ...

0
Sanaulla

für eine Aufzeichnung fand ich, dass meine PHP-Fpm nicht lief und ich reparierte es mit service php7.2-fpm stop

0
IslamTaha

Was für mich mit Ubuntu 16.04 und PHP7 funktionierte, war das Löschen dieser Zeile

fastcgi_split_path_info ^(.+\.php)(/.+)$;

Danach wurden keine PHP-Dateien mehr heruntergeladen.

0
briankip