Nginx + Php5-fpm tidak merender file php

8

Saya telah menghabiskan waktu berjam-jam mencari tahu cara menginstal Nginx + Ruby Enterprise Edition + PHP5-fpm dan MYSQL, akhirnya semuanya terinstal dan semua tampaknya sudah mulai baik-baik saja.

Tetapi karena suatu alasan file php tidak sedang diproses.

File .html berfungsi dengan baik, tetapi ketika saya mencoba dan melihat file .php sepertinya tidak ada, meskipun ada. Menariknya, ketika saya mencoba dan melihat file .html yang tidak ada saya mendapatkan pesan Nginx 404 yang bagus, tetapi ketika saya melihat file .php itu bahkan tidak memberi saya itu.

Jadi untuk pemahaman pemula saya, sepertinya ada sesuatu yang salah dengan konfigurasi, atau Nginx dan PHP-fpm tidak saling berbicara.

Saya telah melihat banyak contoh lain dari file konfigurasi nginx dan saya yakin bahwa banyak hal baik-baik saja. Baiklah ... ini sedikit relevan dari file conf:

location ~ \.php$ {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
   include fastcgi_params;
 }

Dan

    fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffer_size 128k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;

Setiap bantuan sangat dihargai.

sunting : Berikut adalah tajuk yang dikembalikan dari file uji php " http://eman.id.au/test.php ":

HTTP/1.1 404 Not Found =>
Server => nginx/0.8.54
Date => Thu, 16 Dec 2010 19:30:30 GMT
Content-Type => text/html
Connection => close
X-Powered-By => PHP/5.3.2-1ubuntu4.5ppa5~lucid1

Emmanuel
sumber

Jawaban:

10

Saya percaya saya mengalami masalah yang persis sama hari ini, nginx mengirim permintaan ke php-fpm (seperti yang ditunjukkan dalam header) namun Anda mendapatkan 404, meskipun file tersebut ada dan tidak memiliki kesalahan (PHP / sintaks) sama sekali, dan tidak ada kesalahan muncul di log apa pun (ngins atau php-fpm).

Anda tidak menyertakan konfigurasi nginx lengkap Anda, tetapi mungkinkah Anda tidak memiliki opsi "root" untuk mendefinisikan (dengan benar?) Di bagian "server" Anda? Anda perlu memastikan Anda melakukannya, bahwa itu menunjuk ke lokasi yang tepat ofc dan bahwa itu ada di dalam bagian "server", bukan di dalam satu "lokasi" - misalnya:

server {
    root /var/www/eman;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
        include fastcgi_params;
    }
}
fred
sumber
Saya tidak yakin, tapi itu bisa menjadi masalah
Emmanuel
Saya akhirnya membangun kembali VPS dan mencoba lagi menggunakan tutorial yang berbeda, dan sekarang berfungsi dengan baik. :)
Emmanuel
Ini bekerja untuk saya, dan saya menggunakan soket unix untuk parameter fastcgi_pass
Sean
1

Jika Anda melihat header http://eman.id.au/test.php merespons dengan maka Anda akan melihat X-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1. Itu tidak akan menampilkan ini jika permintaan tidak diteruskan ke PHP. Juga, jika PHP tidak dapat menemukan jalur file yang diteruskan ke sana, itu akan mengulang kesalahannyaNo input file specified.

Karena situs Anda menampilkan tajuk yang diberdayakan dan tidak memiliki No input file specified.kesalahan, alasan yang paling mungkin adalah bahwa Anda memiliki kesalahan dalam skrip PHP Anda dan membuat kesalahan tampilan dimatikan. Ini menghasilkan halaman kosong dan entri di log kesalahan Anda, jadi lihat di sana dan lihat apakah itu tidak mengisi.

Martin Fjordvald
sumber
Ah, begitu juga !! Saya melihat halaman di google chrome dan itu hanya memberi saya kesalahan 404, tapi saya baru saja melihatnya di firefox dan itu hanya halaman kosong. Tidak ada kesalahan dalam skrip php. Sebenarnya saya baru saja mengeluarkan semua php darinya dan satu-satunya isinya adalah tag h1
Emmanuel
Saya telah memperbarui posting asli saya dengan header http dari file test.php
Emmanuel
Dan Anda benar-benar yakin bahwa skrip Anda berada di / var / www / eman / dan bahwa path dan file dapat dibaca dan dieksekusi oleh proses PHP?
Martin Fjordvald
Ya mereka skrip pasti di / var / www / eman / file test.php berada di direktori yang sama dengan index.html yang berfungsi dengan baik. Apa yang harus saya periksa untuk memastikan mereka dapat dibaca dan dieksekusi oleh proses PHP ??? Saya tidak yakin tentang itu?
Emmanuel
Yah Anda menelurkan PHP dengan beberapa cara baik melalui spawn-fcgi atau php-fpm, file konfigurasi atau perintah yang digunakan untuk menelurkan harus berisi pengguna proses, setelah itu Anda harus memeriksa izin linux untuk pengguna itu.
Martin Fjordvald
0

Beberapa pemikiran:

   fastcgi_param SCRIPT_FILENAME /var/www/eman$fastcgi_script_name;

Apakah ini perlu tebasan ekstra

   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;

NGINX juga memiliki sedikit caching yang aneh, jadi ketika Anda mencoba URL di browser Anda, tambahkan? Random = 12391 di bagian akhir untuk memaksa penyegaran. Saya telah bingung selama 30 menit karena konfigurasi hanya untuk menemukan itu berfungsi selama ini tetapi saya sedang tersandung oleh cache.

Anda juga mungkin ingin keluar dari lokasi Anda sedikit lebih baik (walaupun ini tidak menyebabkan masalah yang Anda alami) Ini praktik yang lebih baik:

location ~ .php$

untuk

location ~ \.php$

.php $ akan cocok dengan permintaan seperti yourpagephp daripada hanya yourpage.php

Andrew Taylor
sumber
Oke, saya sudah mengedit file conf, tapi tetap tidak beruntung ...
Emmanuel
URL-nya adalah: eman.id.au/test.php, eman.id.au sendiri berfungsi dengan baik di index.html
Emmanuel
Masalah caching itu tidak benar, Nginx tidak menembolok apa pun yang tidak Anda kirim secara khusus. Namun BUKAN seperti Apache, mengubah file konfigurasi memerlukan pemuatan ulang file konfigurasi. Browser Anda juga akan men-cache permintaan, sehingga Anda mungkin membingungkannya.
Martin Fjordvald