Nginx + php5-fpm =“ ไม่พบไฟล์”


14

ฉันตีกำแพงระหว่างตั้งค่าไซต์โดยใช้ nginx / fpm หน้าแสดง "ไม่พบไฟล์" และสิ่งนี้จะปรากฏในข้อผิดพลาด nginx.log:

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

ฉันใหม่สำหรับทั้ง nginx และ fpm และข้อความแสดงข้อผิดพลาดนั้นไม่มีความหมายสำหรับฉันเลยแม้แต่เครื่อง google ก็ยังไม่ได้ช่วย! ทุกคนสามารถปลดปล่อยแสงสว่างที่เกิดขึ้นได้หรือไม่?


คุณสามารถเพิ่มส่วนหนึ่งของการกำหนดค่า nginx ที่คุณกำหนดการจัดการ PHP ได้หรือไม่?
Christopher Perrin

สำหรับผมบทความต่อไปนี้ช่วย: nginxlibrary.com/resolving-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


+1 สำหรับบทความการกำหนดค่าผิดพลาด - คุ้มค่ากับการอ่านโดยเฉพาะอย่างยิ่งถ้าคุณกำลังเรียนรู้ Nginx เขียนดีระดับเริ่มต้นพร้อมด้วยเคล็ดลับดีๆมากมาย!
Ben

2

นี่คือหมายเหตุสำหรับการติดตั้งสำหรับผู้โดยสาร

ฉันเพิ่งติดตั้ง nginx จากต้นทางผ่านผู้โดยสารซึ่งทำให้เกิดปัญหากับ php5-fpm ค่าเริ่มต้น nginx.conf ใช้ประโยชน์จากปัญหาที่อธิบายโดย Michael Hampton ทางออกคือการลบ blok รอบคำสั่ง root และดัชนีดังนั้น:

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

กลายเป็น:

root html
index index.html index.htm

นอกจากนี้การตั้งค่าบล็อก php ไม่ถูกต้อง ดู Michael Hamptons ตอบคำถามสำหรับวิธีการที่ถูกต้อง

หมายเหตุเพิ่มเติมอาจเป็นได้ว่าหาก php5-fpm ถูกตั้งค่าให้ใช้ซ็อกเก็ตชี้พารามิเตอร์ fastcgi_pass ในบล็อก php ใน nginx.conf ไปที่การตั้งค่าซ็อกเก็ตใน /etc/php5/fpm/pool.d/www.conf


2

ฉันเพิ่งพบปัญหานี้ในเวอร์ชันใหม่ของ nginx (การกำหนดค่าที่นำมาจากรุ่นที่เก่ากว่า)

สิ่งที่ฉันต้องทำคือวางที่กำหนด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บรรทัดเพิ่มเติมในบล็อกตำแหน่งของคุณและโหลดการกำหนดค่า nginx ใหม่ นอกจากสิ่งที่Michael Hamptonกล่าวเกี่ยวกับการแก้ไขจุดอ่อนด้านความปลอดภัยที่เฉพาะเจาะจงแล้วยังช่วยให้ fastcgi handler สามารถแทนที่นิยาม alias และค้นหาสคริปต์ 404 ในตำแหน่งเริ่มต้น


1
sudo vim /etc/php-fpm.conf

เกี่ยวกับบรรทัดที่ 149 เปลี่ยนผู้ใช้ php & กลุ่มผู้ใช้

ฉันทดสอบมันสำเร็จแล้ว


นี่เป็นวิธีที่ถูกต้อง! เฮ้ชายคุณสามารถลอง!
รัก

เมื่อคุณเปลี่ยนผู้ใช้และกลุ่มคุณอย่าลืมรีสตาร์ท php-fpm ถ้าคุณใช้ centos6 คุณสามารถใช้คำสั่งนี้: sudo service php-fpm เริ่มใหม่
รัก

0

ฉันเคยเห็น :

FastCGI ส่งเป็น stderr: "ไม่รู้จักสคริปต์หลัก" ในขณะที่อ่านหัวข้อการตอบสนองจากต้นน้ำ

ในเซิร์ฟเวอร์ฉันวางไว้ภายใต้ภาระสูงเมื่อทดสอบความเครียด ความสงสัยของฉันยังคงได้รับการยืนยันคือการจัดการไฟล์ที่มีอยู่จากระบบปฏิบัติการหมดลง ในกรณีนี้ php-fpm ไม่สามารถรับการอ้างอิงไปยังไฟล์

ฉันรู้ว่านี่เป็นการเก็งกำไร แต่มันก็เหมาะกับสถานการณ์ของฉันและอาจช่วยคนอื่นได้


0

ขอบคุณ @ homeway คำตอบของคุณเป็นแรงบันดาลใจให้ฉัน ขอบคุณมาก!

ฉันพบคำถามเดียวกัน แต่วิธีอื่นไม่ช่วยฉันแก้ไขคำถาม!

ฉันแก้ไขมันฉันพบว่ากุญแจสำคัญคือ: ผู้ใช้ Linux นำไปสู่คำถาม: FastCGI ส่งใน stderr: "ไม่รู้จักสคริปต์หลัก"

เนื่องจากผู้ใช้เริ่มต้นของ PHP-FPM คือกลุ่มคือ apache: apache แต่รหัสของคุณคือ someBody: someBody ดังนั้นคุณควรเปลี่ยนผู้ใช้ถูกต้อง!

ฉันเขียนบล็อกเพื่อแก้ไขคำถามนี้คุณสามารถดูบล็อกนี้:

[Nginx FastCGI ส่งเป็น stderr: "ไม่รู้จักสคริปต์หลัก"] [1] `[1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stimr.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.