Diferencias y desventajas entre: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM

73

Hay algunos "envoltorios" de php diferentes (?). ¿Cuáles son las diferencias entre ellos? Intenté buscar en Google, pero parece que no puedo encontrar información. (mod-php no es googleable).

¿Por qué podría elegir uno sobre otro?

Gacek
fuente

Respuestas:

141

Las preguntas son un poco extrañas, no está claro si solo está pidiendo PHP o si su pregunta es más general.

Le daré una breve descripción del lado de PHP.

Primero, los dos protocolos:

  • Los scripts CGI son una forma de ejecutar un script del lado del servidor cuando llega una solicitud HTTP; esto no tiene nada que ver con PHP

  • FastCGI es un "mejor CGI": se sabe que CGI es lento, Fast CGI es un enfoque diferente con resultados mucho más rápidos; Esto tampoco tiene nada que ver con PHP.

Ahora las cosas relacionadas con PHP:

  • mod_php está ejecutando un PHP como módulo de Apache, es decir, la solicitud de PHP se ejecuta bajo el proceso de Apache con todo lo que conlleva: los procesos de Apache están definidos por la configuración de Apache, PHP se ejecuta con el permiso de Apache, etc.

  • PHP-FPM es la implementación de FastCGI de PHP; PHP-FPM se ejecuta como un servidor FastCGI independiente y Apache se conecta al servidor utilizando el módulo de Apache, generalmente mod_fcgid o mod_fastcgi; Personalmente, creo que esto es mucho mejor que ejecutar como mod_php, pero depende de sus requisitos y también es un poco más complejo; en esta configuración, permiso, procesa cosas relacionadas y todo se ejecuta bajo configuración PHP, usuario PHP, etc. & Apache se conecta a PHP como a un servidor; en esta configuración también es posible tener un grupo de servidores PHP y tener un servidor PHP en una máquina físicamente diferente a Apache. Dicen que esto es casi tan rápido como usar el módulo de Apache y hay beneficios de un mejor control sobre la configuración de PHP.

  • SuPHP: esto se usó principalmente para abordar algunos problemas de mod_php relacionados con los permisos; con mod_php, los scripts PHP se ejecutan bajo el usuario / grupo Apache; mod_suphp puede ejecutar los scripts en diferentes usuarios; Nunca lo usé, PHP-FPM ahora debería ser una opción mucho mejor

Así que básicamente:

  • CGI, Fast-CGI son protocolos; CGI es lento, Fast-CGI es mucho más rápido
  • mod_php (con guión bajo) y PHP-FPM son dos formas básicas de cómo ejecutar PHP
  • mod_SuPHP es similar a mod_php pero puede cambiar el usuario / grupo bajo el cual se ejecuta el proceso
Aleš Krajník
fuente
Quizás aclare lo que me inspiró para esta pregunta. Acabo de recibir un VPS con un panel ISPConfig (panel Opensource para páginas de administración). Allí puedo elegir una versión de PHP para servidor / lado. Y esos se enumeran allí. Entonces, ¿parece que elegir PHP-FPM elige FastCGI con "envoltorios" adicionales?
Gacek
12
No sé qué usa realmente el panel ISPConfig, pero PHP se ejecuta como PHP-FPM significa que PHP iniciará su propio servidor FastCGI incorporado y escuchará las solicitudes a través del protocolo FastCGI. El servidor HTTP recibirá solicitudes de Internet, las manejará como de costumbre y en caso de que una página deba ejecutarse usando PHP, la solicitud se entregará a través del protocolo FastCGI a PHP y el resultado se enviará nuevamente al navegador. Piense en eso como un servidor HTTP entre el navegador y el servidor PHP (PHP-FPM FastCGI). PHP-FPM es una implementación del protocolo FastCGI.
Aleš Krajník
@ AlešKrajník gracias por esa explicación elaborada. Bueno, he estado tratando de ejecutar php como usuario / grupo separado. Así que comencé con Su-exec y llegué a un callejón sin salida y luego un par de personas me recomendaron php-fpm, lo que usted ha explicado. Sin embargo, todavía estoy confundido acerca de los módulos mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi y cómo funcionan con php-fpm. También leí en otro tutorial que estaban usando mod_fcgid y mod_proxy_fcgi. Qué difícil es entender cómo se juntan todas las piezas.
David Okwii el
1
El binario @landed PHP-FPM es parte de cada distribución de PHP desde 5.3.3 o 5.4.0 (consulte esto: php-fpm.org ), para esa versión específica de PHP.
Aleš Krajník
2
php-fpm se trata de eliminar los costos de inicialización. php-fpm preinicia varios procesos php, listos para procesar solicitudes y hacerlos dormir hasta que lleguen las solicitudes, lo que significa que puede responder mucho más rápido que el cgi tradicional, porque php ya se está ejecutando cuando llegan las solicitudes, a diferencia del CGI tradicional, donde se inicia un nuevo proceso de php para cada solicitud, también php-fpm no cierra el proceso de php después de procesar las solicitudes, pero sigue reutilizando los mismos procesos. - con 0 sobrecarga de procesos de inicio y detención, php-fpm responde mucho más rápido. iniciar y detener procesos lleva tiempo.
hanshenrik