Nginx mengunduh file PHP hanya jika .php ada di URL

8

Saya tahu ini adalah pertanyaan yang populer tetapi saya belum menemukan orang dengan masalah yang sama. Saya dapat melayani file PHP selama ekstensi .php tidak ada di url. Sebagai contoh:

Jika saya pergi ke localhostsaya dilayani file index.php saya. Jika saya pergi ke localhost/index.phpsaya mengunduh file. Ini konfigurasi saya:

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

Saya cukup bingung dengan masalah ini dan saya bertanya-tanya apakah ada yang punya pengalaman dalam masalah ini.

Mathew A
sumber
Bisakah Anda juga memposting php.ini?
kraxor

Jawaban:

4

Jika ini kadang-kadang berfungsi (jadi Anda tahu PHP-FPM sudah aktif dan berfungsi), saya akan cukup siap untuk menjadi masalah nginx. Saya curiga terhadap beberapa aturan di blok lokasi PHP Anda. Mereka mungkin melanggar URL tertentu yang menyebabkan nginx keluar.

Anda hanya perlu 2 baris untuk menangkap indeks direktori:

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

Lepaskan lokasi itu kembali, muat ulang nginx dan lihat apa yang terjadi.

Jika Anda perlu menulis ulang (URL cantik di Wordpress, dll) Anda ingin menambahkan sesuatu seperti ini

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

Tetapi hanya lakukan itu setelah URL standar berfungsi.

Oli
sumber
2
Saya membuat perubahan dan pada awalnya itu tidak berhasil. Lalu saya menghapus cache di browser saya dan berhasil. Terima kasih atas waktu Anda! :)
Mathew A
1

Namun memiliki masalah yang sama, saya juga membutuhkan baris ini

include fastcgi.conf;

Saya juga punya

location ~* .+ {..}

dan harus memastikan itu pergi setelah lokasi ~ \.php$ {..}

sqram
sumber
1
Hmm menarik include fastcgi.conf;hampir sama include fastcgi_params;tetapi juga termasuk fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;yang beberapa pengguna yang memasukkan include fastcgi_params;bukan .conftermasuk secara manual dalam konfigurasi situs mereka.
LiveWireBT