ความแตกต่างและแตกต่าง / แตกต่างระหว่าง: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM


73

มี "wrappers" php ที่แตกต่างกันไม่กี่ (?) ความแตกต่างระหว่างพวกเขาคืออะไร? พยายามที่จะ google บางอย่าง แต่ดูเหมือนจะไม่พบข้อมูล (mod-php ไม่สามารถใช้ google ได้)

ทำไมฉันถึงเลือกอันใดอันหนึ่ง?

คำตอบ:


141

คำถามนั้นแปลกไปเล็กน้อยมันไม่ชัดเจนหากคุณขอเพียง PHP หรือคำถามของคุณนั้นกว้างกว่า

ฉันจะให้ภาพรวมสั้น ๆ จากด้าน PHP

ก่อนที่ทั้งสองโปรโตคอล:

  • สคริปต์ CGI เป็นวิธีการเรียกใช้สคริปต์ฝั่งเซิร์ฟเวอร์เมื่อมีการร้องขอ HTTP มา สิ่งนี้ไม่เกี่ยวข้องกับ PHP

  • FastCGI เป็น "CGI ที่ดีกว่า" - CGI เป็นที่รู้กันว่าช้า CGI ที่รวดเร็วเป็นวิธีการที่แตกต่างกับผลลัพธ์ที่เร็วกว่ามาก สิ่งนี้ไม่เกี่ยวข้องกับ PHP

ตอนนี้สิ่งที่เกี่ยวข้องกับ PHP:

  • mod_phpกำลังเรียกใช้ PHP เป็นโมดูล Apache - นั่นคือคำขอ PHP ถูกเรียกใช้ภายใต้กระบวนการ Apache กับทุกสิ่งที่เกิดขึ้นกับมัน - กระบวนการ Apache ถูกกำหนดโดยการกำหนดค่า Apache, PHP จะทำงานโดยได้รับอนุญาตจาก Apache เป็นต้น

  • PHP-FPMเป็นการใช้งาน FastCGI ของ PHP; PHP-FPM ทำงานเป็นเซิร์ฟเวอร์ FastCGI แบบสแตนด์อโลนและ Apache เชื่อมต่อกับเซิร์ฟเวอร์โดยใช้โมดูลของ Apache ซึ่งปกติจะเป็น mod_fcgid หรือ mod_fastcgi โดยส่วนตัวฉันคิดว่ามันดีกว่าการใช้ mod_php แต่มันขึ้นอยู่กับความต้องการของคุณและมันก็ซับซ้อนกว่าเล็กน้อย ในการกำหนดค่านี้ได้รับอนุญาตกระบวนการที่เกี่ยวข้องกับสิ่ง & ทุกอย่างทำงานภายใต้การกำหนดค่า PHP, ผู้ใช้ PHP ฯลฯ & Apache เชื่อมต่อกับ PHP เป็นเซิร์ฟเวอร์ ในการกำหนดค่านี้มันเป็นไปได้ที่จะมีกลุ่มของเซิร์ฟเวอร์ PHP และมีเซิร์ฟเวอร์ PHP บนเครื่องที่แตกต่างจาก Apache พวกเขากล่าวว่านี่เกือบจะเร็วเท่ากับการใช้โมดูลของ Apache และมีประโยชน์ในการควบคุมการกำหนดค่า PHP ได้ดีขึ้น

  • SuPHP - ส่วนใหญ่ใช้เพื่อแก้ไขปัญหาบางอย่างของ mod_php ที่เกี่ยวข้องกับการอนุญาต กับ mod_php สคริปต์ PHP จะทำงานภายใต้ Apache ผู้ใช้ / กลุ่ม; mod_suphp สามารถเรียกใช้สคริปต์ในผู้ใช้ที่แตกต่างกัน ฉันไม่เคยใช้มันตอนนี้ PHP-FPM น่าจะเป็นทางเลือกที่ดีกว่ามาก

ดังนั้นโดยทั่วไป:

  • CGI, Fast-CGI เป็นโปรโตคอล CGI ช้าเร็ว -GGI เร็วกว่ามาก
  • mod_php (ที่มีเครื่องหมายขีดเส้นใต้) และ PHP-FPM เป็นสองวิธีพื้นฐานในการเรียกใช้ PHP
  • mod_SuPHP คล้ายกับ mod_php แต่สามารถเปลี่ยนผู้ใช้ / กลุ่มที่กระบวนการทำงานภายใต้

บางทีฉันอาจจะอธิบายสิ่งที่เป็นแรงบันดาลใจให้ฉันสำหรับคำถามนี้ ฉันเพิ่งได้ VPS พร้อมแผง ISPConfig (แผง OpenSource ไปยังหน้าผู้ดูแลระบบ) มีฉันสามารถเลือกรุ่น PHP สำหรับเซิร์ฟเวอร์ / ฝั่ง และมีการระบุไว้ที่นั่น ดังนั้นโดยทั่วไปดูเหมือนว่าการเลือก PHP-FPM จะเลือก FastCGI ด้วย "wrappers" เพิ่มเติมหรือไม่
Gacek

12
ฉันไม่ทราบว่าแผง ISPConfig ใช้อะไรจริงๆ แต่ PHP ทำงานเป็น PHP-FPM หมายความว่า PHP จะเริ่มต้นเป็นเซิร์ฟเวอร์ FastCGI ในตัวและจะรับฟังคำขอผ่านโปรโตคอล FastCGI เซิร์ฟเวอร์ HTTP จะได้รับการร้องขอจากอินเทอร์เน็ตจัดการได้ตามปกติและในกรณีที่หน้าเว็บจำเป็นต้องใช้งาน PHP จะมีการส่งคำขอ FastCGI ไปยัง PHP และผลลัพธ์จะถูกส่งกลับไปยังเบราว์เซอร์ คิดว่าเป็นเซิร์ฟเวอร์ HTTP ยืนระหว่างเบราว์เซอร์และเซิร์ฟเวอร์ PHP (PHP-FPM FastCGI) PHP-FPM เป็นการใช้งานโปรโตคอล FastCGI
AlešKrajník

@ AlešKrajníkขอบคุณสำหรับคำอธิบายที่ซับซ้อน ฉันพยายามเรียกใช้ php แยกผู้ใช้ / กลุ่ม ดังนั้นฉันเริ่มต้นด้วย Su-exec และถึงจุดจบแล้วจากนั้นมีคนแนะนำ php-fpm ที่คุณอธิบาย อย่างไรก็ตามฉันยังคงสับสนเกี่ยวกับโมดูล mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi และวิธีการทำงานของ php-fpm นอกจากนี้ฉันอ่านในบทช่วยสอนอื่นที่ใช้ mod_fcgid และ mod_proxy_fcgi การดิ้นรนเพื่อทำความเข้าใจว่าชิ้นส่วนทั้งหมดมารวมกันได้อย่างไร
David Okwii

1
@landed PHP-FPM binary เป็นส่วนหนึ่งของการแจกแจง PHP ทุกครั้งตั้งแต่ 5.3.3 หรือ 5.4.0 (ตรวจสอบสิ่งนี้: php-fpm.org ) สำหรับ PHP เวอร์ชันนั้น ๆ
AlešKrajník

2
php-fpm นั้นเกี่ยวกับการลบค่าเริ่มต้น php-fpm เริ่มต้นกระบวนการหลาย php พร้อมที่จะประมวลผลการร้องขอและให้พวกเขานอนหลับจนกว่าการร้องขอเข้ามา - ซึ่งหมายความว่ามันสามารถตอบสนองได้เร็วกว่า cgi แบบดั้งเดิมเพราะ php ทำงานแล้วเมื่อร้องขอมาเมื่อเทียบกับ CGI แบบดั้งเดิม โดยที่กระบวนการ php ใหม่เริ่มต้นขึ้นสำหรับการร้องขอแต่ละครั้งเช่นกัน php-fpm ไม่ได้ปิดกระบวนการ php หลังจากที่ประมวลผลคำขอ แต่ให้กลับมาใช้กระบวนการเดิมซ้ำ - ด้วยค่าใช้จ่าย 0 กระบวนการเริ่มต้นและหยุด php-fpm ตอบสนองได้เร็วขึ้นมาก กระบวนการเริ่มต้นและหยุดทำงานต้องใช้เวลา
hanshenrik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.