Nginx + PHP FASTCGI ล้มเหลว - วิธีการแก้ไขปัญหา?


3

ฉันมีเซิร์ฟเวอร์บน AMAZON EC2 ที่ใช้ Nginx + PHP กับ PHP FASTCGI ผ่านพอร์ต 9000

เซิร์ฟเวอร์ทำงานได้ดีในเวลาไม่กี่นาทีและหลังจากนั้นไม่นาน (หลายพันครั้งในกรณีนี้) FastCGI Dies และ Nginx ส่งกลับข้อผิดพลาด 502

บันทึก Nginx จะแสดง

 2010/01/12 16:49:24 [error] 1093#0: *9965 connect() failed (111: Connection refused) while connecting to upstream, client: 79.180.27.241, server: localhost, request: "GET /data.php?data=7781 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site1.mysite.com", referrer: "http://www.othersite.com/subc.asp?t=10"

ฉันจะดีบักสิ่งที่ทำให้ FastCGI ตายได้อย่างไร


ผู้จัดการ cgi คุณมีอะไรบ้าง (เช่น php-fpm / spawn-fcgi) คุณมีกระบวนการ php-fastcgi จำนวนเท่าใด ค่า somaxcon OS และขนาดค้างของกระบวนการ PHP ของคุณคืออะไร?
SaveTheRbtz

คำตอบ:


6

ฉันรู้ว่าตอนนี้ OP อาจดำเนินไปแล้ว แต่ถ้าใครมาที่นี่พร้อมกับปัญหาเดียวกันฉันหวังว่านี่จะช่วยได้


ในการตั้งค่าเริ่มต้น NGINX จะเรียกใช้ในฐานะผู้ใช้ "none" ในขณะที่ spawn-fcgi spawns php-cgi children เป็นผู้ใช้ "root" ดังนั้น NGINX จึงไม่สามารถเชื่อมต่อกับ fastcgi: //127.0.0.1: 9000 ได้ด้วยการอนุญาตในปัจจุบัน สิ่งที่คุณต้องทำคือเปลี่ยนคำสั่ง spawn-fcgi เล็กน้อยเพื่อแก้ไข

spawn-fcgi -a 127.0.0.1 -p 9000 -f /usr/bin/php-cgi -C 5 -U nobody

หรือคุณสามารถใช้ซ็อกเก็ต UNIX (ฉันชอบวิธีนี้)

spawn-fcgi -s /var/run/fcgi.sock -f /usr/bin/php-cgi -C 5 -U nobody

และเปลี่ยน fastcgi_pass ของคุณใน nginx.conf เป็นสิ่งนี้:

...
 location ~ \.php$ {
        fastcgi_pass   unix:/var/run/fcgi.sock;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_$
    }
...

ไม่จำเป็นสำหรับ nginx และ spawn-fcgi ที่จะทำงานภายใต้ผู้ใช้เดียวกันหากพวกเขาเชื่อมต่อผ่านซ็อกเก็ต TCP จำเป็นเฉพาะเมื่อคุณใช้ซ็อกเก็ตยูนิกซ์
Luca Gibelli

0

คุณสามารถเริ่มต้นด้วยการตรวจสอบว่า PHP พิมพ์อะไรบนข้อผิดพลาดมาตรฐานเมื่อมันตาย ถ้าสิ่งนั้นทำให้ไม่มีแสงสว่างในเรื่องนี้ก็อาจจะเป็นการ enlightening เพื่อขอ strace กับกระบวนการ PHP และดูพวกเขาทำสิ่งนั้นแล้วดูสิ่งสุดท้ายที่มันทำ การรันกระบวนการ FCGI ของคุณภายใต้กรอบการตรวจสอบกระบวนการที่มีความสามารถเช่นdaemontoolsก็เป็นแนวคิดที่ดีเช่นกันนั่นคือวิธีที่ฉันใช้กระบวนการ PHP ทั้งหมดของฉันภายใต้ nginx

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