PHP에서 cgi와 fcgi의 차이점: cgi는 공통 게이트웨이 인터페이스를 의미하는 "common Gateway 인터페이스"의 약어이고, fcgi는 빠른 공통 게이트웨이를 의미하는 "빠른 공통 게이트웨이 인터페이스"의 약어입니다. 인터페이스. "php-cgi"는 CGI 프로토콜의 구현이고 "PHP-FPM"은 FCGI 프로토콜의 구현입니다.
이 기사의 운영 환경: Windows 10 시스템, PHP 버전 8.1, Dell G3 컴퓨터
CGI: 공통 게이트웨이 인터페이스 공통 게이트웨이 인터페이스
FCGI : 빠른 공통 게이트웨이 인터페이스 빠른 공통 게이트웨이 인터페이스
php-cgi는 CGI 프로토콜의 구현이고 PHP-FPM은 FCGI 프로토콜의 구현입니다.
CGI는 nginx와 같은 웹 서버와 PHP와 같은 백엔드 동적 스크립팅 언어 간의 통신을 위한 프로토콜 인터페이스입니다.
지식 확장
1. 시나리오:
브라우저는 nginx와 같은 웹 서버를 요청합니다. 요청이 정적 index.html인 경우 nginx가 이를 직접 반환할 수 있습니다. 그러나 요청이 idex.php인 경우 nginx는 구성에 따라 정적 리소스가 아니라는 것을 확인하고 백엔드 서비스를 요청해야 합니다. 그렇다면 nginx가 백엔드 서비스를 요청할 때 어떤 형식과 어떤 데이터를 백엔드 서비스로 보내야 할까요? CGI는 형식과 데이터를 정의하는 프로토콜입니다.
2. CGI 프로토콜의 단점:
CGI 프로토콜은 백엔드 서비스를 요청할 때마다 CGI 프로토콜을 구현하는 프로그램을 시작해야 합니다. 여기에는 PHP 파서가 있습니다. PHP 파서는 PHP.ini 파일을 구문 분석하고, 초기화 작업을 수행하고, 요청을 처리하고, 결과를 반환합니다. 각 요청을 다시 초기화해야 하는데 이는 너무 중복되는 작업입니다. 그래서 FCGI가 탄생했습니다.
PHP는 해석 언어이기 때문에 PHP 코드를 해석하려면 해석기가 필요합니다.
3. FCGI의 장점:
FCGI 프로토콜은 먼저 PHP.ini 파일을 구문 분석하고 초기화 작업을 수행하는 데 사용되는 마스터를 시작합니다. 여러 작업자를 시작하면 작업자는 특정 요청을 처리하는 데 사용됩니다. 이는 초기화와 특정 요청 처리를 분리합니다. 여기에도 마스터와 워커를 관리하는 프로그램이 필요하므로 PHP-FPM이 등장했습니다.
FCGI는 C/S 아키텍처를 채택합니다. 웹 서버를 스크립트 파싱 서버와 분리하세요. 웹 서버가 정적 리소스만 처리하도록 하고 백엔드 스크립트 구문 분석 서버에서 반환된 데이터를 브라우저에 반환합니다.
웹 서버 nginx는 PHP 프로그램 등 외부 프로그램의 직접 호출이나 파싱을 지원하지 않으므로 CGI 인터페이스를 통해 호출해야 합니다. 이는 실제로 PHP-FPM인 래퍼를 형성하기 위해 CGI 캡슐화를 필요로 합니다. nginx는 PHP-FPM을 호출하고, PHP-FPM은 백엔드 PHP 코드를 호출한 다음, PHP-FPM이 결과를 nginx에 반환합니다.
이제 PHP-FPM이 PHP 코어에 통합되었습니다.
PHP-FPM과 nginx는 정적 리소스를 처리하고 동적 요청을 전달해야 하는 프런트 엔드 nginx의 부담을 줄이기 위해 종종 다른 서버에 배포됩니다.
그리고 FCGI도 CGI보다 안전합니다.
4. CGI 프로토콜 PHP-CGI 구현
php.ini 파일이 수정되면 PHP-CGI가 원활하게 전환되지 않습니다. 즉, 이러한 새 구성을 사용하려면 PHP-CGI 프로그램을 다시 시작해야 합니다.
5. FCGI 프로토콜 PHP-FPM
구현 php.ini 파일을 수정하면 PHP-FPM이 원활하게 전환됩니다. 수정 전 워커의 경우 요청 처리 후 파기되며, 새로 생성된 워커는 새로운 구성을 사용할 수 있습니다. 이는 또한 원활한 전환을 달성합니다.
또한 PHP-CGI 프로세스가 중단되면 PHP를 실행할 수 없습니다. PHP-FPM에는 이 문제가 없으며 데몬은 하위 프로세스를 원활하게 다시 시작합니다.
PHP-FPM이 등장하기 전에는 실제로 lighthttpd에서 개발된spawn-fcgi가 있었습니다. PHP-FPM은 초기화 중에 여러 작업자를 생성할 수 있으며 작업자가 유휴 상태인 경우 작업자를 재활용할 수 있습니다.
spawn-fcgi는 메모리 누수를 일으키거나 동시성이 높을 때 FCGI를 자동으로 다시 시작할 수도 있습니다.
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP에서 cgi와 fcgi의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!