Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM의 차이점 및 단점


73

몇 가지 다른 PHP "래퍼"(?)가 있습니다. 그들 사이의 차이점은 무엇입니까? 일부 구글을 시도했지만 정보를 찾지 못하는 것 같습니다. (mod-php는 구글이 아닙니다).

왜 다른 것을 선택할 수 있습니까?

답변:


141

질문은 조금 이상합니다. PHP 만 요구하는지 또는 질문이 더 일반적인지 확실하지 않습니다.

PHP 측에서 간략하게 설명하겠습니다.

먼저 두 프로토콜 :

  • CGI 스크립트는 HTTP 요청이 올 때 서버 측 스크립트를 실행하는 방법입니다. 이것은 PHP와 관련이 없습니다.

  • FastCGI는 "더 나은 CGI"입니다. CGI는 느린 것으로 알려져 있습니다. Fast CGI는 훨씬 빠른 결과를 가진 다른 접근법입니다. 이것은 또한 PHP와 관련이 없습니다.

이제 PHP 관련 사항 :

  • mod_php 는 PHP를 Apache 모듈로 실행하고 있습니다. 즉, PHP 요청은 그와 함께 제공되는 모든 아파치 프로세스에서 실행됩니다.-Apache 프로세스는 Apache 구성에 의해 정의되고, PHP는 Apache 권한으로 실행됩니다.

  • PHP-FPM 은 PHP의 FastCGI 구현입니다. PHP-FPM은 독립형 FastCGI 서버로 실행되며 Apache는 일반적으로 mod_fcgid 또는 mod_fastcgi와 같은 Apache 모듈을 사용하여 서버에 연결합니다. 개인적으로 이것이 mod_php로 실행하는 것보다 훨씬 낫다고 생각하지만 요구 사항에 따라 다르며 조금 더 복잡합니다. 이 구성에서 권한, 프로세스 관련 항목 및 모든 것은 PHP 구성, PHP 사용자 등에서 실행됩니다. & Apache는 서버에 대해 PHP에 연결합니다. 이 구성에서 PHP 서버 풀을 보유하고 Apache와 물리적으로 다른 시스템에 PHP 서버를 가질 수도 있습니다. 그들은 이것이 아파치 모듈을 사용하는 것만 큼 빠르며 PHP 구성에 대한 더 나은 제어의 이점이 있다고 말합니다.

  • SuPHP-이것은 권한과 관련된 mod_php의 일부 문제를 해결하기 위해 주로 사용되었습니다. mod_php 사용 PHP 스크립트는 Apache 사용자 / 그룹에서 실행됩니다. mod_suphp는 다른 사용자에서 스크립트를 실행할 수 있습니다. 나는 그것을 사용하지 않았다 .PHP-FPM은 이제 훨씬 더 나은 선택이어야한다.

그래서 기본적으로:

  • CGI, Fast-CGI는 프로토콜입니다. CGI는 느리고 Fast-CGI는 훨씬 빠릅니다
  • PHP를 실행하는 두 가지 기본 방법은 mod_php (밑줄 포함)와 PHP-FPM입니다.
  • mod_SuPHP는 mod_php와 비슷하지만 프로세스가 실행되는 사용자 / 그룹을 변경할 수 있습니다

이 질문에 어떤 영감을 주 었는지 분명히 설명 할 것입니다. 방금 ISPConfig 패널 (관리 페이지의 오픈 소스 패널)이있는 VPS를 받았습니다. 거기에서 서버 / 사이드 용 PHP 버전을 선택할 수 있습니다. 그리고 그것들은 거기에 나열되어 있습니다. 기본적으로 PHP-FPM을 선택하면 추가 "래퍼"가있는 FastCGI를 선택한 것 같습니다.
Gacek

12
ISPConfig 패널이 실제로 무엇을 사용하는지 모르지만 PHP는 PHP-FPM으로 실행됩니다 .PHP는 자체 내장 FastCGI 서버를 시작하고 FastCGI 프로토콜을 통해 요청을 수신합니다. HTTP 서버는 인터넷에서 요청을 받아 정상적으로 처리하며 PHP를 사용하여 페이지를 실행해야하는 경우 요청은 FastCGI 프로토콜을 PHP로 전달하고 결과는 브라우저로 다시 전송됩니다. 브라우저와 PHP (PHP-FPM FastCGI) 서버 사이에 HTTP 서버가 있다고 생각하십시오. 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 바이너리는 특정 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.