Pertama kali saya menggunakan Nginx, tapi saya lebih akrab dengan Apache dan Linux. Saya menggunakan proyek yang sudah ada dan kapan pun saya mencoba melihat index.php saya mendapatkan File 404 tidak ditemukan.
Inilah entri access.log:
2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.ordercloud.lh"
Dan di sini adalah file yang tersedia di situs:
server {
set $host_path "/home/willem/git/console/www";
access_log /www/logs/console-access.log main;
server_name console.ordercloud;
root $host_path/htdocs;
set $yii_bootstrap "index.php";
charset utf-8;
location / {
index index.html $yii_bootstrap;
try_files $uri $uri/ /$yii_bootstrap?$args;
}
location ~ ^/(protected|framework|themes/\w+/views) {
deny all;
}
#avoid processing of calls to unexisting static files by yii
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
try_files $uri =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(.*)$;
#let yii catch the calls to unexising PHP files
set $fsn /$yii_bootstrap;
if (-f $document_root$fastcgi_script_name){
set $fsn $fastcgi_script_name;
}
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fsn;
#PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for CGI
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fsn;
}
location ~ /\.ht {
deny all;
}
}
My / home / willem / git / console dimiliki oleh www-data: www-data (pengguna web saya yang menjalankan php dll) dan saya telah memberinya 777 izin karena frustrasi ...
Dugaan terbaik saya adalah ada sesuatu yang salah dengan konfigurasi, tapi saya tidak bisa mengetahuinya ...
PEMBARUAN
Jadi saya memindahkannya ke /var/www/
dan menggunakan konfigurasi yang jauh lebih mendasar:
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default ipv6only=on; ## listen for ipv6
root /var/www/;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name console.ordercloud;
location / {
root /var/www/console/frontend/www/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www;
include fastcgi_params;
}
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
try_files $uri =404;
}
location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
deny all;
}
}
Juga jika saya menelepon localhost/console/frontend/www/index.php
saya mendapatkan 500 PHP yang artinya melayani di sana. Itu hanya tidak melayani dari console.ordercloud ...
Jawaban:
Pesan kesalahan "skrip primer tidak diketahui" hampir selalu terkait dengan salah set
SCRIPT_FILENAME
dalamfastcgi_param
direktif nginx (atau izin salah, lihat jawaban lain).Anda menggunakan
if
dalam konfigurasi yang Anda posting pertama kali. Baik itu harus diketahui sekarang bahwa jika itu jahat dan sering menghasilkan masalah.Mengatur
root
arahan di dalam blok lokasi adalah praktik yang buruk, tentu saja itu berhasil.Anda dapat mencoba sesuatu seperti berikut ini:
Harap dicatat bahwa konfigurasi di atas tidak teruji. Anda harus menjalankannya
nginx -t
sebelum menerapkannya untuk memeriksa masalah yang dapat segera dideteksi nginx.sumber
root
lokasi di dalam?http
bagian berikut:log_format scripts '$document_root$fastcgi_script_name > $request';
(atau apa pun yang Anda makan untuk SCRIPT_FILENAME), dan untuk Andaserver
:access_log /var/log/nginx/scripts.log scripts
. Muat ulang dan lihat log skrip baru Anda;)Ini tidak selalu bahwa
SCRIPT_FILENAME
salah.Mungkin juga PHP berjalan sebagai pengguna / grup yang salah .
Contoh ini khusus untuk Mac OS X , yang dalam pengalaman saya adalah yang paling sulit untuk diatur (Debian lebih mudah dibandingkan) - Saya baru saja memutakhirkan dari PHP 5.6 ke 7.0, menggunakan homebrew dan paket josegonzalez yang sangat baik.
Masalahnya adalah bahwa salinan baru dari file konfigurasi telah dibuat.
File konfigurasi utama adalah
/usr/local/etc/php/7.0/php-fpm.conf
, tetapi perhatikan bagian Pool Definition di bagian akhir di mana ia menyertakan seluruh subdirektori.include=/usr/local/etc/php/7.0/php-fpm.d/*.conf
Di
php-fpm.d
sana adawww.conf
file. Secara default ini memiliki:Pada OS X, Anda mungkin perlu mengubahnya ke:
(Anda harus menemukan ini cocok dengan
ls -lh
document_root Anda)Sayangnya tanpa perubahan ini, Anda masih akan melihat ini di log kesalahan Nginx Anda bahkan jika itu mencari file di tempat yang benar .
Verifikasi apa yang sedang berjalan sebagai:
atau lebih bersih:
Cara memverifikasi apakah nama file skrip benar:
(Dicuri dari igorsantos07 di jawaban lain)
Tambahkan ke
http
blok utama/usr/local/etc/nginx/nginx.conf
:(di mana bit pertama harus berupa apa pun yang sedang Anda gunakan, sehingga Anda dapat melihat apakah itu benar.)
Dan untuk menggunakan log yang baru saja Anda tentukan, di
server
blok situs Anda :Jika benar, meminta example.com/phpinfo.php akan menghasilkan sesuatu seperti ini:
Bisakah Anda menyederhanakan konfigurasi yang ada?
Apakah Anda menggunakan
location ~ \.php {
blok yang Anda salin / tempel dari suatu tempat di internet? Sebagian besar paket memungkinkan Anda melakukannya dengan lebih cepat dan bersih. mis. pada OS X Anda sekarang hanya perlu ini:Hal-hal seperti fastcgi_split_path_info, try_files dan fastcgi_index (default ke index.php) ada di
/usr/local/etc/nginx/snippets/fastcgi-php.conf
.Itu pada gilirannya termasuk
/usr/local/etc/nginx/fastcgi.conf
yang merupakan daftarfastcgi_param
pengaturan, termasuk SCRIPT_FILENAME yang penting.Jangan pernah menggandakan
root
dalam blok lokasi PHP.sumber
/etc/php/7.0/php-fpm.d/www.conf
file. Terima kasih, bud. :) Semakin banyak orang mungkin mulai melihat masalah ini juga karena popularitas gelandangan terus tumbuh./usr/local/etc/nginx/snippets/fastcgi-php.conf
pada mac saya .. tetapi saya menemukan/usr/local/etc/nginx/fastcgi.conf
Ok, jadi 3 hal yang saya temukan setelah seharian berjuang
Semoga ini menyelamatkan seseorang dari masalah!
sumber
Punya masalah yang sama dengan nginx yang lebih baru (v1.8). Versi yang lebih baru merekomendasikan menggunakan
snippets/fastcgi-php.conf;
bukanfastcgi.conf
. Jadi, jika Anda menyalin / menempelinclude fastcgi.conf
dari tutorial, Anda mungkin berakhir denganPrimary script unknown
kesalahan dalam log.sumber
"Script primer tidak dikenal" disebabkan oleh konteks keamanan SELinux.
klien mendapat respons
nginx error.log memiliki pesan kesalahan berikut
jadi cukup ubah jenis konteks keamanan folder root web ke httpd_sys_content_t
ada 3 pengguna untuk konfigurasi nginx / php-fpm
/etc/nginx/nginx.conf
/etc/nginx/conf.d/www.conf
/etc/php-fpm.d/www.conf
user-1 dan user-2 tidak perlu sama.
untuk soket unix, pengguna-1 harus sama dengan pengguna-3, karena nginx fastcgi_pass harus memiliki izin baca / tulis pada soket unix.
jika tidak nginx akan mendapatkan 502 Bad Gateway , dan nginx error.log memiliki pesan kesalahan berikut
dan pengguna / grup folder root web (/ var / www / show) tidak perlu sama dengan salah satu dari 3 pengguna ini.
sumber
Saya memiliki masalah ini juga, dan saya menyelesaikannya dengan bertukar garis
include fastcgi_params
danfastcgi_param SCRIPT_FILENAME ...
.Memang nginx menetapkan nilai terakhir dari setiap parameter FastCGI, jadi Anda harus meletakkan nilai Anda setelah nilai default dimasukkan dalam fastcgi_params.
sumber
Saya memecahkan masalah ini dengan menutup SELINUX dalam sistem CentOS7.3
Langkah:
setenforce 0
vim /etc/selinux/config set SELINUX to disabled
sumber
Saya menemukan pertanyaan Anda mencari pesan kesalahan yang sama tetapi menggunakan apache + php-fpm (no nginx). Bagi saya, masalahnya adalah garis miring di tempat yang salah: banyak saran pengaturan menyertakan baris formulir:
Dengan menempatkan garis miring terakhir setelah nomor port seperti:
masalah menghilang untuk saya. Mungkin Anda bisa melakukan hal serupa
sumber
sumber
Saya mengkloning situs jarak jauh, dan wp-config.php yang sudah ada memiliki info basis data server jarak jauh.
Saya menyelesaikan masalah ini dengan mengatur konfigurasi wordpress lokal saya, dengan info basis data lokal saya.
sumber
Saya melakukan segalanya dari atas, kehilangan 2 jam membenturkan kepala dan masalah masih ada. Akhirnya saya lakukan:
Dan biola berhasil!
Btw, saya sedang menyiapkan proyek symfony 3.4 baru dengan nginx conf dari tautan: https://symfony.com/doc/3.4/setup/web_server_configuration.html
Itu adalah kelima kalinya saya memulai proyek symfony baru dan saya tidak percaya "skrip Primer tidak dikenal" ini terjadi.
sumber
Periksa izin untuk file kaus php-fpm Anda, entah bagaimana itu tidak dapat diakses:
chmod 755 /usr/local/var/run/php-fpm.sock
kemudian coba restart nginx.
sumber
Saya telah terjebak oleh pesan aneh ini untuk waktu yang sangat lama. Saya tidak yakin tentang penyebabnya karena semuanya bekerja sebentar kemudian tiba-tiba berhenti bekerja.
Saya memperpendek URL wiki seperti yang ditentukan oleh MediaWiki, dengan Bitnami / Nginx di Lightsail.
Mencari dan membaca banyak posting, yang ini sepertinya merangkum semua skenario yang mungkin, dan saya mencoba semuanya:
root
ke server, tidak berfungsiJadi saya harus mencoba pilihan terakhir, karena folder root php berfungsi dan subfolder tidak, satu-satunya perbedaan utama di antara mereka selain
root
folder root yang digunakan$request_filename
dan lokasi subfolder yang digunakan$document_root
dan$fastcgi_script_name
, jadi saya mengubah pengaturan lokasi subfolder agar sesuai dengan folder root.Kemudian berhasil ... saya masih tidak yakin mengapa itu berhasil. Karena ketika saya memeriksa log akses php-fpm saya melihat URI yang sama, satu adalah 404 dan yang lainnya 200.
Satu-satunya perbedaan adalah dalam konfigurasi. Karena mereka menghasilkan output yang sama, saya tidak tahu mengapa hasilnya berbeda.
Pokoknya saya memutuskan untuk memposting 2 sen saya di sini, semoga ini membantu.
PS: Saya benar-benar berharap PHP memberikan pesan kesalahan dan mode verbose yang lebih baik, karena ini benar-benar membuat frustrasi karena tidak dapat mengisolasi masalah dan tidak ada cara untuk melihat keluaran verbose dan info debug.
sumber
Cobalah untuk menambahkan arahan root di dalam lokasi php Anda.
sumber
root
direktif harus ditetapkan pada perserver
secara dan tidak boleh digunakan dalam setiaplocation
blok (kecuali Anda seorang profesional dan ingin menghindari beberapa bug nginx sangat istimewa dalam konfigurasi Anda).root
arahan di dalamlocation
blok.root
arahan di dalam banyaklocation
blok jelas di bawah judul BAD.