Nginx scarica il file PHP solo se .php è nell'URL


8

So che questa è una domanda popolare ma non ho trovato nessuno con il mio problema simile. Posso servire file PHP purché l'estensione .php non sia nell'URL. Per esempio:

Se vado a localhostmi viene servito il mio file index.php. Se vado a localhost/index.phpscaricare il file. Ecco la mia configurazione:

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

Sono abbastanza confuso da questo problema e mi chiedo se qualcuno abbia esperienza in merito.


Puoi pubblicare anche il tuo php.ini?
kraxor,

Risposte:


4

Se questo a volte funziona (quindi sai che PHP-FPM è attivo e funzionante), sarei piuttosto impostato sul fatto che si tratta di un problema di nginx. Sono sospettoso di un paio di regole nel tuo blocco posizione PHP. Essi possono essere di rottura in determinati URL causando nginx per scaricare fuori.

Per catturare gli indici delle directory sono necessarie solo 2 righe:

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

Spoglia quella posizione indietro a quella, ricaricare nginx e vedere cosa succede.

Se hai bisogno di riscrivere (graziosi URL in Wordpress, ecc.) Vuoi aggiungere qualcosa del genere

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

Ma fallo solo dopo aver funzionato con gli URL standard.


2
Ho apportato le modifiche e all'inizio non ha funzionato. Quindi ho rimosso la cache dal mio browser e ha funzionato. Grazie per il tuo tempo! :)
Mathew A

1

Ho avuto lo stesso problema, tuttavia, avevo anche bisogno di questa linea

include fastcgi.conf;

Ho anche avuto

location ~* .+ {..}

e ha dovuto assicurarsi che andasse dopo la posizione ~ \.php$ {..}


1
Hmm interessante include fastcgi.conf;è quasi lo stesso di include fastcgi_params;ma include inoltre fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;quali utenti che includono include fastcgi_params;invece di .confincludere manualmente nella configurazione dei loro siti.
LiveWireBT
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.