먼저 CGI란 무엇인가? CGI는 웹 서버가 전달하는 데이터가 CGI 프로그램 작성자에게 편리한 표준 형식인지 확인하는 것입니다.
웹 서버(예: nginx)는 단지 콘텐츠 배포자일 뿐입니다. 예를 들어 /index.html을 요청하면 웹 서버는 파일 시스템에서 이 파일을 찾아 브라우저로 보냅니다. 여기에 배포되는 것은 정적 데이터입니다. 좋아요, 이제 요청이 /index.php에 대한 것이라면, 구성 파일에 따르면 nginx는 이것이 정적 파일이 아니며 PHP 파서에 의해 처리되어야 한다는 것을 알고 있습니다. 그러면 단순히 요청을 처리하여 다음으로 넘겨줄 것입니다. PHP 파서. Nginx는 어떤 데이터를 PHP 파서에 전달합니까? URL이 있어야 하고, 쿼리 문자열이 있어야 하며, POST 데이터가 있어야 하고, HTTP 헤더가 있어야 합니다. CGI는 어떤 데이터를 어떤 형식으로 전달할지 규정하는 프로토콜입니다. 요청 처리를 위한 백엔드. PHP 코드에 사용하는 사용자가 어디에서 왔는지 신중하게 생각해 보세요.
웹 서버가 /index.php에 대한 요청을 받으면 PHP 파서인 해당 CGI 프로그램을 시작합니다. 다음으로, PHP 파서는 php.ini 파일을 구문 분석하고, 실행 환경을 초기화하고, 요청을 처리하고, 처리된 결과를 CGI에서 지정한 형식으로 반환하고, 프로세스를 종료합니다. 그런 다음 웹 서버는 결과를 브라우저에 반환합니다.
그렇습니다. CGI는 프로토콜이며 프로세스나 그와 유사한 것과는 아무런 관련이 없습니다. 그렇다면 fastcgi는 무엇입니까? Fastcgi는 CGI 프로그램의 성능을 향상시키는 데 사용됩니다.
성능 향상, 그렇다면 CGI 프로그램의 성능 문제점은 무엇일까? "PHP 파서는 php.ini 파일을 구문 분석하고 실행 환경을 초기화합니다", 그게 전부입니다. 표준 CGI는 각 요청에 대해 이러한 단계를 수행하므로(지치지 마세요! 프로세스를 시작하는 것은 매우 피곤합니다!) 매번 처리하는 시간이 상대적으로 길어집니다. 이것은 분명히 불합리한 일입니다! 그렇다면 Fastcgi는 어떻게 이를 수행하는가? 먼저 Fastcgi는 마스터를 시작하고 구성 파일을 구문 분석하고 실행 환경을 초기화한 다음 여러 작업자를 시작합니다. 요청이 들어오면 마스터는 이를 워커에게 전달하고 즉시 다음 요청을 수락할 수 있습니다. 이는 작업의 중복을 방지하고 자연스럽게 매우 효율적입니다. 작업자가 충분하지 않은 경우 마스터는 구성에 따라 여러 작업자를 미리 시작하고 기다릴 수 있습니다. 물론 유휴 작업자가 너무 많으면 일부가 중지되어 성능이 향상되고 리소스가 절약됩니다. fastcgi의 프로세스 관리입니다.
그럼 PHP-FPM이란 무엇일까요? Fastcgi를 구현한 프로그램으로 PHP에서 공식적으로 승인되었습니다.
우리 모두 알고 있듯이 PHP의 인터프리터는 php-cgi입니다. php-cgi는 단지 CGI 프로그램일 뿐입니다. 요청을 구문 분석하고 결과를 반환할 수 있을 뿐 프로세스를 관리하는 방법은 모릅니다. (폐하, 저는 정말 그렇게 할 수 없습니다!) 그래서 php-cgi를 예약할 수 있는 프로그램이 있습니다. 예를 들어,spawn-fcgi는 lighthttpd와 분리되어 있습니다. PHP-FPM도 마찬가지입니다. 오랜 개발 기간을 거쳐 점차 모든 사람에게 인정을 받게 되었고(지난 몇 년 동안 모두가 PHP-FPM의 안정성이 좋지 않다고 불평했습니다) 점점 더 인기가 많아지고 있습니다.
자, 드디어 질문으로 돌아오겠습니다.
인터넷에서 어떤 사람들은 fastcgi가 프로토콜이라고 하는데 php-fpm이 이 프로토콜을 구현한다고 합니다
그렇습니다.
어떤 사람들은 php-fpm이 fastcgi 프로세스를 관리하는데 사용되는 fastcgi 프로세스의 관리자라고 합니다그렇습니다. php-fpm의 관리 객체는 php-cgi입니다. 그러나 php-fpm이 fastcgi 프로세스의 관리자라고 말할 수는 없습니다. 앞서 언급했듯이 fastcgi는 프로토콜이고, 그러한 프로세스는 존재하지 않는 것 같기 때문입니다. php-fpm이 존재하더라도 이를 관리할 수는 없습니다(적어도). 지금은).
어떤 사람들은 php-fpm이 php 커널의 패치라고 합니다
이전에는 맞았습니다. 처음에는 PHP 커널에 php-fpm이 포함되어 있지 않았기 때문에 이 기능을 사용하려면 소스코드 버전과 동일한 php-fpm을 찾아 커널을 패치한 후 컴파일해야 한다. 나중에 PHP 커널에 PHP-FPM이 통합된 이후에는 --enalbe-fpm 컴파일 매개변수를 사용하면 훨씬 더 편리해졌습니다.php.ini 구성 파일을 수정하고 나면 원활하게 재시작할 방법이 없다고 하시는 분들도 계시는데, 그래서 php-fpm이 탄생했습니다.
네, php.ini 수정 후 php-cgi 프로세스가 되네요 작동하지 않습니다. 원활하게 다시 시작하는 방법입니다. php-fpm의 처리 메커니즘은 새로운 작업자가 새로운 구성을 사용하고 기존 작업자는 작업을 마친 후 휴식을 취하는 것입니다. 이 메커니즘은 전환을 원활하게 하는 데 사용됩니다.어떤 사람들은 PHP-CGI가 PHP와 함께 제공되는 FastCGI 관리자라고 말합니다. 그렇다면 왜 php-fpm을 만들어야 할까요?
그렇지 않습니다. php-cgi는 PHP 스크립트를 해석하는 프로그램입니다.위 내용은 관련 내용을 포함하여 fastcgi와 php-fpm의 관계를 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.