먼저 CGI란 무엇일까요?FastCgi와 php-fpm의 관계를 거의 일주일 동안 온라인으로 확인했습니다. 기본적으로 정말 다른 의견이 있고 권위 있는 내용이 없습니다. 정의. .
인터넷의 일부 사람들은 fastcgi가 프로토콜이고 php-fpm이 이 프로토콜을 구현한다고 말합니다.
어떤 사람들은 php-fpm이 fastcgi 프로세스를 관리하는 데 사용되는 fastcgi 프로세스의 관리자라고 말합니다.
php-fpm은 php 커널용 패치라는 말도 있고
php.ini 구성 파일을 수정한 후에는 원활하게 다시 시작할 방법이 없어서 php-fpm이 탄생했다고도 합니다.
- 또한 어떤 사람들은 PHP-CGI가 PHP와 함께 제공되는 FastCGI 관리자라고 말합니다. 그렇다면 php-fpm을 만드는 이유는 무엇입니까?
좋아요, CGI는 프로토콜이고 프로세스나 다른 것과는 아무 관련이 없습니다. 그럼 fastcgi란 무엇일까요?
- CGI는 웹 서버가 전달하는 데이터가 CGI 프로그램 작성자에게 편리한 표준 형식인지 확인하는 것입니다.
- 웹 서버(예: nginx)는 단지 콘텐츠 배포자일 뿐입니다. 예를 들어 /index.html을 요청하면 웹 서버는 파일 시스템에서 이 파일을 찾아 브라우저로 보냅니다. 여기에 배포되는 것은 정적 데이터입니다. 좋아요, 이제 요청이 /index.php에 대한 것이라면, 구성 파일에 따르면 nginx는 이것이 정적 파일이 아니며 PHP 파서에 의해 처리되어야 한다는 것을 알고 있습니다. 그러면 단순히 요청을 처리하여 다음으로 넘겨줄 것입니다. PHP 파서. Nginx는 어떤 데이터를 PHP 파서에 전달합니까? URL이 있어야 하고, 쿼리 문자열이 있어야 하며, POST 데이터가 있어야 하고, HTTP 헤더가 있어야 합니다. CGI는 어떤 데이터를 어떤 형식으로 전달할지 규정하는 프로토콜입니다. 요청 처리를 위한 백엔드.
- 웹 서버가 /index.php에 대한 요청을 받으면 해당 CGI 프로그램인 PHP 파서가 시작됩니다. 다음으로, PHP 파서는 php.ini 파일을 구문 분석하고, 실행 환경을 초기화하고, 요청을 처리하고, 처리된 결과를 CGI에서 지정한 형식으로 반환하고, 프로세스를 종료합니다. 그런 다음 웹 서버는 결과를 브라우저에 반환합니다.
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 스크립트를 해석하는 프로그램입니다.
추천 학습: "PHP 비디오 튜토리얼"