Nginx ne télécharge le fichier PHP que si .php est dans l'URL

8

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

Si je vais à, localhostje reçois mon fichier index.php. Si je vais sur localhost/index.phpje 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 confus par cette question et je me demande si quelqu'un a de l'expérience en la matière.

Mathew A
la source
Pouvez-vous également poster votre php.ini?
kraxor

Réponses:

4

Si cela fonctionne parfois (vous savez donc que PHP-FPM est en place et fonctionne), je serais plutôt prêt à ce qu'il s'agisse d'un problème nginx. Je me méfie de quelques règles de votre bloc de localisation PHP. Ils peuvent casser certaines URL provoquant le vidage de nginx.

Vous n'avez besoin que de 2 lignes pour intercepter les index de répertoire:

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

Supprimez cet emplacement, rechargez nginx et voyez ce qui se passe.

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

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

Mais ne faites cela qu'une fois que les URL standard fonctionnent.

Oli
la source
2
J'ai fait les changements et au début ça n'a pas marché. Ensuite, j'ai supprimé le cache de mon navigateur et cela a fonctionné. Merci pour votre temps! :)
Mathew A
1

Eu ce même problème, cependant, j'avais aussi besoin de cette ligne

include fastcgi.conf;

J'avais aussi

location ~* .+ {..}

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

sqram
la source
1
Hmm intéressant include fastcgi.conf;est presque le même que include fastcgi_params;mais inclut en outre fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;que certains utilisateurs qui incluent include fastcgi_params;au lieu d' .confinclure manuellement dans la configuration de leurs sites.
LiveWireBT