wake-up-neo.com

Portion PHP Dateien als Downloads, anstatt sie auszuführen

Ich habe kürzlich nginx und php 7.0.16 auf meinem Rechner installiert, aber aus irgendeinem Grund lädt nginx PHP-Dateien herunter, anstatt sie auszuführen. Ich habe bereits einige Tage damit verbracht, alle online verfügbaren Lösungen zu implementieren, aber alles umsonst.

Meine nginx.conf ist:

worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.Fedora.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Es gibt keine Datei im Ordner conf.d und sites-enabled enthält nur die Standarddatei, die wie folgt aussieht

server {
    listen 80;
    server_name infrastructure;
    root /home/infra/index;
    index index.php index.html index.htm;
    #return 301 https://$server_name$request_uri;

    location / {
        try_files $uri $uri/ = 404;
    }

    # pass the PHP scripts to FastCGI server listening on the php-fpm socket
    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;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}

Kann mir bitte jemand raten, woran das liegen könnte?

3
Ravi Singh

Die Lösung gefunden. Das Problem lag in der Datei nginx.conf.

Ersetzte folgende Zeile:

default_type        application/octet-stream;

mit:

default_type        text/html;
9
Ravi Singh

Nginx ist als Paket für Ubuntu 16.04 verfügbar, das wir installieren können.

apt-get -y install nginx

Starte danach nginx:

service nginx start

Dann öffne die localhost-Seite und schau, was auf dich zukommt.

Installiere PHP 7

Wir können PHP mit PHP-FPM in Nginx ausführen (PHP-FPM (FastCGI Process Manager) ist eine alternative PHP FastCGI-Implementierung mit einigen zusätzlichen Funktionen, die insbesondere für Websites jeder Größe nützlich sind belebteren Standorten), die wir wie folgt installieren:

apt-get -y install php7.0-fpm

PHP-FPM ist ein Daemon-Prozess (mit dem Init-Skript php7.0-fpm), der einen FastCGI-Server auf dem Socket /run/php/php7.0-fpm.sock ausführt.

Die Nginx-Konfiguration befindet sich in /etc/nginx/nginx.conf, die wir jetzt öffnen:

nano /etc/nginx/nginx.conf

Die Konfiguration ist einfach zu verstehen (Sie können hier mehr darüber erfahren: http://wiki.nginx.org/NginxFullExample und hier: http://wiki.nginx.org/NginxFullExample2 )

Stellen Sie zuerst (dies ist optional) das keepalive_timeout auf einen vernünftigen Wert ein:

[...]
    keepalive_timeout   2;
[...]

Die virtuellen Hosts sind in Server-Containern definiert. Der Standard-vhost ist in der Datei/etc/nginx/sites-available/default definiert. Ändern wir ihn wie folgt:

nano /etc/nginx/sites-available/default

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

 # SSL configuration
 #
 # listen 443 ssl default_server;
 # listen [::]:443 ssl default_server;
 #
 # Note: You should disable gzip for SSL traffic.
 # See: https://bugs.debian.org/773332
 #
 # Read up on ssl_ciphers to ensure a secure configuration.
 # See: https://bugs.debian.org/765782
 #
 # Self signed certs generated by the ssl-cert package
 # Don't use them in a production server!
 #
 # include snippets/snakeoil.conf;

 root /var/www/html;

 # Add index.php to the list if you are using PHP
 index index.html index.htm index.nginx-debian.html;

 server_name _;

 location / {
 # First attempt to serve request as file, then
 # as directory, then fall back to displaying a 404.
 try_files $uri $uri/ =404;
 }

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 location ~ \.php$ {
 include snippets/fastcgi-php.conf;

 # With php7.0-cgi alone:
 # fastcgi_pass 127.0.0.1:9000;
 # With php7.0-fpm:
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 }

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

servername _; macht dies zu einem voreingestellten catchall vhost (natürlich können Sie hier auch einen Hostnamen wie www.example.com angeben).

root/var/www/html; bedeutet, dass der Dokumentenstamm das Verzeichnis/var/www/html ist.

Der wichtige Teil für PHP ist die Zeilengruppe location ~ .php $ {}. Kommentieren Sie es aus, um es zu aktivieren.

Speichern Sie nun die Datei und laden Sie nginx neu:

service nginx reload

Öffnen Sie als Nächstes /etc/php/7.0/fpm/php.ini ...

nano /etc/php/7.0/fpm/php.ini

... und set cgi.fix_pathinfo=0:

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

PHP-FPM neu laden:

service php7.0-fpm reload

Erstellen Sie nun die folgende PHP Datei im Dokument root/var/www/html:

nano /var/www/html/info.php

<?php
phpinfo();
?>

Jetzt rufen wir diese Datei in einem Browser auf (z. B. http: //localhost/info.php ):

4
Pradeep Sapkota

Bei Verwendung von php-fpm habe ich diesen Block in/etc/nginx/sites-available/default auskommentiert

 location ~ \.php$ {
            include snippets/fastcgi-php.conf;
    #
    #       # With php-fpm (or other unix sockets):
            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    #       # With php-cgi (or other tcp sockets):
            #fastcgi_pass 127.0.0.1:9000;
    }
0
Tarek Fellah

sie müssen wie im ersten Schritt einen Standortblock für PHP festlegen

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