web-dev-qa-db-fra.com

Portion PHP fichiers en tant que téléchargements, au lieu de les exécuter

J'ai récemment installé nginx et php 7.0.16 sur ma machine, mais pour une raison quelconque, nginx télécharge des fichiers php plutôt que de les exécuter. J'ai déjà passé quelques jours et mis en œuvre toutes les solutions disponibles en ligne, mais en vain. 

Mon nginx.conf est: 

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

Il n'y a pas de fichier dans le dossier conf.d et sites-enabled a seulement le fichier par défaut qui ressemble à celui ci-dessous

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

Quelqu'un peut-il s'il vous plaît conseiller, quel pourrait être le problème?

3
Ravi Singh

Trouvé la solution. Le problème était dans le fichier nginx.conf. 

Ligne suivante remplacée:

default_type        application/octet-stream;

avec:

default_type        text/html;
9
Ravi Singh

Nginx est disponible sous forme de package pour Ubuntu 16.04 que nous pouvons installer.

apt-get -y install nginx

Lancez nginx ensuite:

service nginx start

Ensuite, ouvrez la page localhost et voyez ce qui s’affiche.

Installer PHP 7

Nous pouvons faire fonctionner PHP dans nginx via PHP-FPM (PHP-FPM (FastCGI Process Manager) est une alternative à la mise en oeuvre de PHP FastCGI avec quelques fonctionnalités supplémentaires utiles pour les sites sites plus occupés) que nous installons comme suit:

apt-get -y install php7.0-fpm

PHP-FPM est un processus démon (avec le script d'initialisation php7.0-fpm) qui exécute un serveur FastCGI sur le socket /run/php/php7.0-fpm.sock.

La configuration de nginx se trouve dans /etc/nginx/nginx.conf que nous ouvrons maintenant:

nano /etc/nginx/nginx.conf

La configuration est facile à comprendre (vous pouvez en apprendre plus à ce sujet ici: http://wiki.nginx.org/NginxFullExample et ici: http://wiki.nginx.org/NginxFullExample2 )

D'abord (c'est facultatif), ajustez keepalive_timeout à une valeur raisonnable:

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

Les hôtes virtuels sont définis dans les conteneurs du serveur {}. Le vhost par défaut est défini dans le fichier/etc/nginx/sites-available/default - modifions-le comme suit:

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;
 }
}
[...]

nom du serveur _; en fait un vhost attrapeur par défaut (bien sûr, vous pouvez également spécifier un nom d’hôte ici, comme www.example.com).

root/var/www/html; signifie que la racine du document est le répertoire/var/www/html.

La partie importante pour PHP est la strophe ~ .php $ {}. Décommentez-le pour l'activer.

Maintenant, sauvegardez le fichier et rechargez nginx:

service nginx reload

Prochainement ouvert /etc/php/7.0/fpm/php.ini ...

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

... et 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
[...]

Rechargez PHP-FPM:

service php7.0-fpm reload

Créez maintenant le fichier PHP suivant dans le répertoire racine/var/www/html:

nano /var/www/html/info.php

<?php
phpinfo();
?>

Nous appelons maintenant ce fichier dans un navigateur (par exemple, http: //localhost/info.php ):

4
Pradeep Sapkota

Lors de l'utilisation de php-fpm, je n'ai pas commenté ce bloc dans/etc/nginx/sites-available/default

 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

vous devez définir un bloc d'emplacement pour PHP comme vous l'avez fait dans le premier

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