Nginx + php5-fpm = "फ़ाइल नहीं मिली"


14

मैंने एक दीवार को हिट किया है, जिसमें नगीनक्स / एफपीएम का उपयोग करके साइट स्थापित करना है। पृष्ठ "फ़ाइल नहीं मिली" दिखाता है, और यह nginx error.log में दिखाई देता है:

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

मैं दोनों nginx और fpm के लिए नया हूं, और उस त्रुटि संदेश का मेरे लिए कोई मतलब नहीं है (यहां तक ​​कि Google मशीन ने भी मदद नहीं की है!)। किसी को क्या हो रहा है पर किसी भी प्रकाश बहा सकते हैं?


क्या आप अपने nginx config के हिस्से को जोड़ सकते हैं जहाँ आप निश्चित रूप से PHP को संभाल रहे हैं?
क्रिस्टोफर पेरिन

मेरे लिए निम्नलिखित लेख ने मदद की: nginxlibrary.com/resolve-no-input-file-specified-error । आम तौर पर यह त्रुटि आती है अगर वहाँ के साथ एक समस्या है SCRIPT_FILENAME
white_gecko

जवाबों:


18

आपके पास locationइस तरह कॉन्फ़िगर किए गए PHP अनुरोधों को संभालने के लिए एक अनुभाग होना चाहिए :

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

(अतिरिक्त सुरक्षा भेद्यता कोtry_files हल करता है जो मनमानी फाइलों को PHP के रूप में निष्पादित करने की अनुमति दे सकता है।)

इसके अलावा, आपके rootमें परिभाषित किया जाना चाहिए serverविन्यास फाइल, की धारा नहींlocation अनुभाग। यह सबसे आम nginx misconfigurations में से एक है


उस ग़लतफ़हमी के लेख के लिए +1 - वास्तव में एक पढ़ने लायक है, खासकर यदि आप Nginx सीख रहे हैं। कई शानदार युक्तियों के साथ अच्छी तरह से लिखा, प्रवेश-स्तर!
बेन

2

यह यात्री इंस्टॉल के लिए एक नोट है।

मैंने बस यात्री के माध्यम से स्रोत से nginx स्थापित किया जो php5-fpm के साथ एक समस्या का कारण बना। डिफ़ॉल्ट nginx.conf माइकल हैम्पटन द्वारा वर्णित समस्या का उपयोग करता है। समाधान मूल और सूचकांक निर्देशों के आसपास ब्लोक को हटाने के लिए है, इसलिए:

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

हो जाता है:

root html
index index.html index.htm

इसके अलावा php ब्लॉक को गलत तरीके से सेट किया गया है। इसके सही तरीके के लिए माइकल हैम्पटन का जवाब देखें।

एक अतिरिक्त नोट यह हो सकता है कि अगर php5-fpm का उपयोग सॉकेट बिंदु के लिए करने के लिए सेट किया गया हो तो nginx.conf में phc ब्लॉक में fastcgi_pass पैरामीटर को /etc/php5/fpm/pool.d/www.conf में सॉकेट सेटअप पर सेट करें।


2

आई जस्ट नग्नेक्स के एक नए संस्करण में यह समस्या थी। (पुराने संस्करण से लिया गया कॉन्फ़िगरेशन)

मुझे जो करना था, वह include fastcgi_params;मेरे रिवाज़ SCRIPT_FILENAMEको इस तरह रखा गया था:

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

जैसा कि SCRIPT_FILENAMEओवरराइट किया जा रहा था।


1

यदि आप अपने स्थान ब्लॉक में उपनाम का उपयोग कर रहे हैं, तो एक अनहेल्ड 404 त्रुटि भी इस व्यवहार को प्रदर्शित कर सकती है। आप यह देख सकते हैं कि ब्राउज़र में प्रदर्शित पृष्ठ सरल पाठ "फ़ाइल नहीं मिली" है जैसा कि प्रीटीटियर स्वरूपित (केंद्रित) nginx 404 पृष्ठ के विपरीत है। अनिवार्य रूप से, यह वास्तव में कह रहा है कि 404 पृष्ठ नहीं मिल सकता है।

हल करने के लिए, try_files $uri =404अपने स्थान ब्लॉक में एक अतिरिक्त पंक्ति जोड़ें और नगीन कॉन्फिग को पुनः लोड करें। एक विशेष सुरक्षा भेद्यता को हल करने के बारे में माइकल हैम्पटन ने जो कहा, इसके अलावा , यह फास्टैगी हैंडलर को उपनाम की परिभाषा को ओवरराइड करने और 404 स्क्रिप्ट को डिफ़ॉल्ट स्थान पर खोजने की अनुमति देता है।


1
sudo vim /etc/php-fpm.conf

लाइन 149 के बारे में, php उपयोगकर्ता && उपयोगकर्ता समूह बदलें

मैं अब सफल परीक्षण करता हूँ।


यह तरीका सही है! अरे यार, तुम यह कोशिश कर सकते हैं!
लव

जब आप उपयोगकर्ता और समूह को बदलते हैं, तो आप php-fpm को पुनरारंभ करना नहीं भूलते हैं। यदि आप सेंटोस 6 का उपयोग करते हैं, तो आप इस कमांड का उपयोग कर सकते हैं: sudo service php-fpm पुनरारंभ
Love

0

मैंने देखा है :

FastCGI ने stderr में भेजा: "प्राथमिक स्क्रिप्ट अज्ञात", जबकि अपस्ट्रीम से प्रतिक्रिया हेडर पढ़ रहा है

एक सर्वर में जब मैं तनाव परीक्षण के दौरान उच्च भार के नीचे रखा गया था। मेरा संदेह, अभी भी पुष्टि की जा रही है, ओएस से उपलब्ध फ़ाइल हैंडल समाप्त हो गए थे। जिस स्थिति में php-fpm फ़ाइल का संदर्भ नहीं मिल सकता है।

मुझे लगता है कि यह सट्टा है, लेकिन यह निश्चित रूप से मेरे परिदृश्य को फिट करता है और किसी और को भी मदद कर सकता है।


0

धन्यवाद @homeway, आपका जवाब मुझे प्रेरित करता है। आपका बहुत बहुत धन्यवाद!

मैं एक ही प्रश्न को पूरा करता हूं, लेकिन अन्य विधि से मुझे प्रश्न हल करने में मदद नहीं मिली!

मैं इसे हल करता हूं, मुझे लगता है कि कुंजी है: लिनक्स उपयोगकर्ता प्रश्न के लिए सही नेतृत्व: FastCGI stderr में भेजा: "प्राथमिक स्क्रिप्ट अज्ञात"

क्योंकि PHP-FPM डिफ़ॉल्ट उपयोगकर्ता: समूह अपाचे है: अपाचे, लेकिन आपका कोड dir कुछ है: someBody। तो आपको उपयोगकर्ता को सही बदलना चाहिए!

मैं इस प्रश्न को हल करने के लिए एक ब्लॉग लिखता हूँ, आप इस ब्लॉग को देख सकते हैं:

[Nginx FastCGI ने stderr में भेजा: "प्राथमिक स्क्रिप्ट अज्ञात"] [1] `[1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-startr-primary.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.