web-dev-qa-db-fra.com

Nginx télécharge le fichier PHP uniquement si .php se trouve dans l'URL

Je sais que c'est une question populaire, mais je n'ai trouvé personne avec le même problème. Je peux servir des fichiers PHP tant que l'extension .php n'est pas dans l'URL. Par exemple:

Si je vais à localhost on me sert mon fichier index.php. Si je vais à localhost/index.php je télécharge le fichier. Voici ma config:

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

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

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    #   proxy_pass http://127.0.0.1:8080;    
    #}

    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 /usr/share/nginx/html;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

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

Je suis assez déconcerté par ce problème et je me demande si quelqu'un a de l'expérience en la matière.

8
Mathew A

Si cela fonctionne parfois (vous savez donc que PHP-FPM est opérationnel), je serais plutôt décidé à ce que ce soit un problème nginx. Je me méfie de quelques règles de votre bloc d'emplacement PHP. Ils pourraient casser certaines URL provoquant le vidage de nginx.

Vous avez seulement besoin 2 lignes pour attraper les index de répertoires:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
}

Dénudez cet emplacement, rechargez nginx et voyez ce qui se passe.

Si vous avez besoin de réécrire (de jolies URL dans Wordpress, etc.), vous voulez ajouter quelque chose comme ceci.

location / {
        try_files $uri $uri/ /index.php?$args;
}

Mais ne le faites que lorsque les URL standard fonctionnent.

4
Oli

Si j'avais le même problème, cependant, j'avais aussi besoin de cette ligne

include fastcgi.conf;

J'ai aussi eu

location ~* .+ {..}

et devait s'assurer qu'il allait après l'emplacement ~ \.php$ {..}

1
sqram