Nginx + php5-fpm = “Dosya bulunamadı”


14

Nginx / fpm kullanarak bir site kurarken bir duvara çarptım. Sayfa "Dosya bulunamadı" görüntüler ve bu nginx error.log dosyasında görünür:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

Hem nginx hem de fpm için yeniyim ve bu hata mesajı benim için hiçbir şey ifade etmiyor (google makinesi bile yardımcı olmadı!). Herkes neler olabileceğine ışık tutabilir mi?


Nginx yapılandırmanızın PHP işlemeyi tanımladığınız kısmını ekleyebilir misiniz?
Christopher Perrin

Benim için aşağıdaki makale yardımcı oldu: nginxlibrary.com/resolving-no-input-file-specified-error . Genellikle bu hata, ile ilgili bir sorun varsa gelir SCRIPT_FILENAME.
white_gecko

Yanıtlar:


18

Buna locationbenzer şekilde yapılandırılmış PHP isteklerini işlemek için bir bölümünüz olmalıdır :

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include         fastcgi_params;
    }

(Ekstra , rasgele dosyaların PHP olarak yürütülmesine izin verebilecek try_filesbir güvenlik açığını giderir .)

Buna ek olarak, senin roottanımlanması gerektiğini serveryapılandırma dosyasının, bölümüne değillocation bölümü. Bu, en yaygın nginx yanlış yapılandırmalarından biridir .


Bu yanlış yapılandırmalar makalesi için +1 - özellikle Nginx öğreniyorsanız, gerçekten okumaya değer. İyi yazılmış, giriş seviyesi, birkaç harika ipucu!
Ben

2

Bu, yolcu kurulumları için bir nottur.

Ben sadece php5-fpm ile ilgili bir soruna neden yolcudan kaynak nginx yükledim. Varsayılan nginx.conf, Michael Hampton tarafından açıklanan sorunu kullanır. Çözüm, kök ve dizin yönergelerinin etrafındaki bloğu kaldırmaktır, böylece:

location / {
    root html
    index index.html index.htm
}

dönüşür:

root html
index index.html index.htm

Ayrıca php bloğu yanlış ayarlanmış. Doğru yol için Michael Hamptons cevabına bakınız.

Ek bir not, php5-fpm soketleri kullanacak şekilde ayarlanmışsa, nginx.conf'daki php bloğundaki fastcgi_pass parametresini /etc/php5/fpm/pool.d/www.conf içindeki soket kurulumuna işaret edebilir.


2

Nginx'in yeni bir sürümünde bu sorunu yaşadım. (yapılandırma daha eski bir sürümden alınmıştır)

Yapmak zorunda olduğum şey, include fastcgi_params;benim gelenekimiSCRIPT_FILENAME gibi :

location @web {
        try_files $uri =404;
        include         fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;
}

Şöyle SCRIPT_FILENAMEyazılır ediliyordu.


1

Konum bloklarınızda takma ad kullanıyorsanız, işlenmemiş bir 404 hatası da bu davranışı gösterebilir. Tarayıcıda görüntülenen sayfa, daha güzel biçimlendirilmiş (ortalanmış) nginx 404 sayfasının aksine "Dosya bulunamadı" metniyse bunu görebilirsiniz. Aslında, 404 sayfasının bulunamadığını söylüyor.

try_files $uri =404Çözmek için konum bloğunuza ek bir satır ekleyin ve nginx yapılandırmasını yeniden yükleyin. Michael Hampton'un belirli bir güvenlik açığını çözme hakkında söylediklerine ek olarak , bu da fastcgi işleyicisinin takma ad tanımını geçersiz kılmasına ve 404 komut dosyasını varsayılan konumda bulmasına izin verir.


1
sudo vim /etc/php-fpm.conf

149 hakkında, php kullanıcı && kullanıcı grubunu değiştirme

Şimdi başarılı bir şekilde test ediyorum.


Bu doğru! Hey adamım, deneyebilirsin!
aşk

Kullanıcı ve grubu değiştirdiğinizde, php-fpm'yi yeniden başlatmayı unutmayın. Centos6 kullanıyorsanız şu komutu kullanabilirsiniz: sudo service php-fpm restart
Love

0

Ben gördüm :

StCtrr'de gönderilen FastCGI: yukarı akıştan yanıt başlığını okurken "Birincil komut dosyası bilinmiyor"

Stres testi yaparken yüksek yük altına yerleştirdiğim bir sunucuda. Hala teyit edilecek şüphem, işletim sistemindeki mevcut dosya tanıtıcılarının tükendiğidir. Bu durumda php-fpm dosyaya bir başvuru alamaz.

Bunun spekülatif olduğunu anlıyorum ama kesinlikle senaryoma uyuyor ve başka birine de yardımcı olabilir.


0

Teşekkürler @homeway, Cevabınız bana ilham veriyor. Çok teşekkür ederim!

Aynı soruyu karşılıyorum, ama Diğer yöntem soruyu çözmeme yardımcı olmadı!

Çözdüm, anahtarı buluyorum: Linux Kullanıcı Sağ soruya yol: FastCGI gönderilen stderr: "Birincil komut dosyası bilinmiyor"

PHP-FPM varsayılan kullanıcı: grubu apache: apache olduğundan, ancak kod dizininiz someBody: someBody'dir. Bu yüzden Kullanıcı hakkını değiştirmelisiniz!

Bu soruyu çözmek için bir blog yazıyorum, bu blogu görebilirsiniz:

[Stginr'de gönderilen Nginx FastCGI: "Birincil komut dosyası bilinmiyor"] [1] `[1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.