Nginx lädt PHP-Dateien nur herunter, wenn sich .php in der URL befindet

8

Ich weiß, dass dies eine beliebte Frage ist, aber ich habe niemanden mit meinem ähnlichen Problem gefunden. Ich kann PHP-Dateien bereitstellen, solange die Erweiterung .php nicht in der URL enthalten ist. Zum Beispiel:

Wenn ich zu gehe, wird localhostmir meine index.php-Datei zugestellt. Wenn ich zu gehe, localhost/index.phplade ich die Datei herunter. Hier ist meine Konfiguration:

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

Ich bin ziemlich verwirrt von diesem Thema und frage mich, ob jemand Erfahrung in dieser Angelegenheit hat.

Mathew A.
quelle
Kannst du auch deine posten php.ini?
Kraxor

Antworten:

4

Wenn dies manchmal funktioniert (Sie wissen also, dass PHP-FPM funktioniert), wäre ich ziemlich sicher, dass dies ein Nginx-Problem ist. Ich bin misstrauisch gegenüber einigen Regeln in Ihrem PHP-Standortblock. Sie könnten in bestimmten URLs brechen verursacht nginx auskippen.

Sie benötigen nur 2 Zeilen, um Verzeichnisindizes abzufangen:

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

Entfernen Sie diesen Speicherort zurück, laden Sie nginx neu und sehen Sie, was passiert.

Wenn Sie neu schreiben müssen (hübsche URLs in Wordpress usw.), möchten Sie so etwas hinzufügen

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

Tun Sie dies jedoch erst, wenn die Standard-URLs funktionieren.

Oli
quelle
2
Ich habe die Änderungen vorgenommen und zuerst hat es nicht funktioniert. Dann habe ich den Cache in meinem Browser entfernt und es hat funktioniert. Vielen Dank für Ihre Zeit! :)
Mathew A
1

Hatte das gleiche Problem, aber ich brauchte auch diese Leitung

include fastcgi.conf;

Ich hatte auch

location ~* .+ {..}

und musste sicherstellen, dass es nach Ort ging ~ \.php$ {..}

sqram
quelle
1
Hmm interessant include fastcgi.conf;ist fast das gleiche wie include fastcgi_params;, schließt aber zusätzlich ein, fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;was einige Benutzer in ihre Site-Konfiguration einbeziehen, include fastcgi_params;anstatt sie .confmanuell einzubeziehen.
LiveWireBT