Perbedaan dan perbedaan antara: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM

73

Ada beberapa "pembungkus" php (?) Yang berbeda. Apa perbedaan di antara mereka? Sudah mencoba beberapa google, tetapi tampaknya tidak dapat menemukan informasi. (mod-php tidak dapat di-googleable).

Mengapa saya memilih satu dari yang lain?

Gacek
sumber

Jawaban:

141

Pertanyaannya agak aneh, tidak jelas apakah Anda hanya meminta PHP atau pertanyaan Anda lebih umum.

Saya akan memberi Anda gambaran singkat dari sisi PHP.

Pertama, dua protokol:

  • Skrip CGI adalah cara menjalankan skrip sisi server saat permintaan HTTP datang; ini tidak ada hubungannya dengan PHP

  • FastCGI adalah "CGI yang lebih baik" - CGI dikenal lambat, Fast CGI adalah pendekatan yang berbeda dengan hasil yang jauh lebih cepat; ini juga tidak ada hubungannya dengan PHP.

Sekarang hal-hal terkait PHP:

  • mod_php menjalankan PHP sebagai modul Apache - yaitu permintaan PHP dijalankan di bawah proses Apache dengan semua yang menyertainya - proses Apache ditentukan oleh konfigurasi Apache, PHP dijalankan dengan izin Apache dll.

  • PHP-FPM adalah implementasi FastCGI PHP; PHP-FPM berjalan sebagai server FastCGI yang berdiri sendiri dan Apache terhubung ke server menggunakan modul Apache, biasanya mod_fcgid atau mod_fastcgi; Saya pribadi berpikir ini jauh lebih baik daripada menjalankan sebagai mod_php, tetapi itu tergantung pada kebutuhan Anda dan juga sedikit lebih kompleks; dalam konfigurasi ini, izin, proses hal-hal terkait & semuanya dijalankan di bawah konfigurasi PHP, pengguna PHP dll. & Apache terhubung ke PHP ke server; dalam konfigurasi ini juga dimungkinkan untuk memiliki kumpulan server PHP dan memiliki server PHP pada mesin yang secara fisik berbeda dari Apache. Mereka mengatakan ini hampir secepat menggunakan modul Apache dan ada manfaat dari kontrol yang lebih baik atas konfigurasi PHP.

  • SuPHP - ini sebagian besar digunakan untuk mengatasi beberapa masalah mod_php terkait dengan izin; dengan mod_php skrip PHP dijalankan di bawah pengguna / grup Apache; mod_suphp dapat menjalankan skrip di pengguna yang berbeda; Saya tidak pernah menggunakannya, PHP-FPM sekarang harus menjadi pilihan yang jauh lebih baik

Jadi pada dasarnya:

  • CGI, Fast-CGI adalah protokol; CGI lambat, Cepat-CGI jauh lebih cepat
  • mod_php (dengan garis bawah) dan PHP-FPM adalah dua cara dasar cara menjalankan PHP
  • mod_SuPHP mirip dengan mod_php tetapi dapat mengubah pengguna / grup yang menjalankan proses
Aleš Krajník
sumber
Mungkin saya akan menjelaskan apa yang menginspirasi saya untuk pertanyaan ini. Saya baru saja mendapatkan VPS dengan panel ISPConfig (panel opensource untuk halaman admin). Di sana saya dapat memilih versi PHP untuk server / sisi. Dan mereka terdaftar di sana. Jadi pada dasarnya tampaknya memilih PHP-FPM memilih FastCGI dengan "pembungkus" tambahan?
Gacek
12
Saya tidak tahu apa yang benar-benar digunakan panel ISPConfig, tetapi PHP berjalan sebagaimana artinya PHP-FPM, bahwa PHP akan memulai server FastCGI bawaannya sendiri dan akan mendengarkan permintaan melalui protokol FastCGI. Server HTTP akan menerima permintaan dari internet, menanganinya seperti biasa dan jika suatu halaman perlu dijalankan menggunakan PHP, permintaan akan diserahkan protokol FastCGI ke PHP dan hasilnya akan dikirim kembali ke browser. Anggap saja sebagai server HTTP yang berada di antara browser dan server PHP (PHP-FPM FastCGI). PHP-FPM adalah implementasi protokol FastCGI.
Aleš Krajník
@ AlešKrajník terima kasih atas penjelasan terperinci itu. Yah, saya sudah mencoba menjalankan php sebagai pengguna / grup terpisah. Jadi saya mulai dengan Su-exec dan menemui jalan buntu dan kemudian beberapa orang merekomendasikan php-fpm yang telah Anda jelaskan. Namun, saya masih bingung tentang modul mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi dan bagaimana ini bekerja dengan php-fpm. Saya juga membaca tutorial lain yang mereka gunakan mod_fcgid dan mod_proxy_fcgi. Betapa sulitnya memahami bagaimana semua bagian itu bisa bersatu.
David Okwii
1
@landed PHP-FPM biner adalah bagian dari setiap distribusi PHP sejak 5.3.3 atau 5.4.0 (lihat ini: php-fpm.org ), untuk versi PHP tertentu.
Aleš Krajník
2
php-fpm adalah tentang menghapus biaya inisialisasi. php-fpm memulai beberapa proses php, siap untuk memproses permintaan, dan membuatnya tidur sampai permintaan masuk - yang berarti dapat merespons lebih cepat daripada cgi tradisional, karena php sudah berjalan ketika permintaan datang, tidak seperti CGI tradisional, di mana proses php baru dimulai untuk setiap permintaan, juga php-fpm tidak mematikan proses php setelah memproses permintaan, tetapi tetap menggunakan kembali proses yang sama. - dengan 0 overhead memulai dan menghentikan proses, php-fpm merespons lebih cepat. memulai & menghentikan proses membutuhkan waktu.
hanshenrik