이 기사는 웹 서버의 PHP 작동 모드에 대한 자세한 설명을 제공합니다. 이는 특정 참고 가치가 있으므로 도움이 될 수 있습니다.
CGI 공통 게이트웨이 인터페이스(Common Gateway Interface)
CGI는 공통 게이트웨이 인터페이스(Common Gateway Interface) 프로그램이며, 평신도의 관점에서 CGI는 웹 페이지와 웹 서버의 실행 프로그램을 연결하는 다리와 같습니다. HTML에서 받은 명령을 서버의 실행 프로그램에 전달하고, 서버의 실행 프로그램의 결과를 HTML 페이지에 반환합니다. CGI 크로스 플랫폼 성능이 뛰어나 거의 모든 운영 체제에서 구현될 수 있습니다. CGI는 이미 오래된 모델이며 최근에는 거의 사용되지 않았습니다.
사용자 요청이 있을 때마다 먼저 cgi 하위 프로세스가 생성된 후 요청이 처리되고 하위 프로세스가 처리 후 종료됩니다. 이것이 포크 앤 실행 모드입니다. 사용자 요청 수가 매우 많으면 메모리, CPU 시간 등 시스템 리소스를 많이 차지하게 되어 성능이 저하됩니다. 따라서 CGI를 사용하는 서버는 연결 요청 수만큼 많은 CGI 하위 프로세스를 가지게 됩니다. 하위 프로세스의 반복적인 로드는 CGI 성능이 저하되는 주요 원인입니다.
PHP를 서버 측 소프트웨어(예: Apache)에 포함하고 모듈로 설치하고 싶지 않은 경우 CGI 모드로 설치하도록 선택할 수 있습니다. 또는 다양한 CGI 래퍼와 함께 PHP를 사용하여 코드에 대한 보안 chroot 및 setuid 환경을 만듭니다. 이렇게 각 클라이언트는 php 파일을 요청하고, 웹 서버는 php.exe(win에서는 php.exe, Linux에서는 php)를 호출하여 파일을 해석한 후, 해석 결과를 다음과 같은 형태로 클라이언트에게 반환합니다. 웹페이지. 이 설치 방법은 일반적으로 웹 서버의 cgi-bin 디렉터리에 PHP 실행 파일을 설치합니다. CERT 권장 사항 CA-96.11에서는 cgi-bin 디렉터리에 인터프리터를 배치하지 않을 것을 권장합니다.
이 방법의 장점은 웹 서버를 특정 프로그램 처리와 분리하고 구조가 명확하며 제어성이 강하다는 점입니다. 동시에 액세스 수요가 높을 경우 CGI 프로세스 포크가 매우 커진다는 단점이 있습니다. 서버 부담이 크면 서버가 수백 개의 프로세스를 포크하여 이해하도록 하는 수백 개의 동시 요청을 상상해 보십시오. 이것이 바로 CGI가 항상 낮은 성능과 높은 리소스 소비로 악명이 높았던 이유입니다.
fast-cgi (long-live CGI)
cgi 모드의 변형, 즉 (cgi는 보통 사람이고 fast-cgi는 특수부대입니다)
FastCGI는 수명이 긴 CGI와 같습니다(장기 CGI). -live) CGI는 항상 활성화되어 있으면 매번 포크하는 데 시간이 걸리지 않습니다(이는 CGI에서 가장 비판받는 포크 및 실행 모드입니다).
FastCGI의 작동 원리는 다음과 같습니다.
FastCGI 프로세스 관리자는 웹 서버가 시작될 때 로드됩니다. [PHP의 FastCGI 프로세스 관리자는 PHP-FPM(php-FastCGI 프로세스 관리자)입니다.](IIS ISAPI 또는 Apache 모듈)
FastCGI 프로세스 관리자는 자체적으로 초기화되고 여러 CGI 인터프리터 프로세스(작업 관리자에 표시되는 여러 php-cgi.exe)를 시작한 다음 웹 서버의 연결을 기다립니다.
클라이언트 요청이 웹 서버에 도달하면 FastCGI 프로세스 관리자가 CGI 인터프리터를 선택하고 연결합니다. 웹 서버는 CGI 환경 변수와 표준 입력을 FastCGI 하위 프로세스 php-cgi로 보냅니다.
FastCGI 하위 프로세스는 처리를 완료한 후 동일한 연결에서 웹 서버에 표준 출력 및 오류 정보를 반환합니다. FastCGI 하위 프로세스가 연결을 닫으면 요청이 처리됩니다. 그런 다음 FastCGI 하위 프로세스는 FastCGI 프로세스 관리자(WebServer에서 실행)의 다음 연결을 기다리고 처리합니다. 일반 CGI 모드에서는 php-cgi.exe가 여기서 종료됩니다.
CGI 모드에서는 일반적으로 CGI가 얼마나 느린지 상상할 수 있습니다. PHP에 대한 모든 웹 요청은 php.ini를 다시 구문 분석하고, 모든 dll 확장을 다시 로드하고, 모든 데이터 구조를 다시 초기화해야 합니다. FastCGI를 사용하면 이 모든 작업이 프로세스가 시작될 때 한 번만 발생합니다. 추가적인 이점은 영구 데이터베이스 연결이 작동할 수 있다는 것입니다.
cli 명령줄 인터페이스
터미널에 php script.php 및 기타 명령줄 입력
웹 모듈 모드(apache 등) 웹 서버의 모듈 모드 running)
모듈 모드는 mod_php5 모듈 형태로 통합되었습니다. 이때 mod_php5 모듈의 기능은 Apache가 전달한 PHP 파일 요청을 받아 처리한 다음 처리된 결과를 Apache로 반환하는 것입니다. PHP의 운영 효율성을 높이기 위한 CGI 기반 Apache의 확장입니다. Apache가 시작되기 전에 구성 파일에서 PHP 모듈(mod_php5)을 구성하면 PHP 모듈은 apache2의 ap_hook_post_config 후크를 등록하고 Apache가 PHP 파일에 대한 요청을 수락하기 시작할 때 이 모듈을 시작합니다.
시작 시 이러한 로딩 방법 외에도 Apache 모듈은 런타임 시 동적으로 로드될 수 있습니다. 즉, 소스 코드를 다시 컴파일할 필요 없이 또는 서버를 전혀 중지하지 않고도 서버를 확장할 수 있습니다. 우리가 해야 할 일은 HUP 또는 AP_SIG_GRACEFUL 신호를 서버에 보내 서버에 모듈을 다시 로드하라고 알리는 것뿐입니다. 그러나 동적 로딩 전에 모듈을 동적 링크 라이브러리로 컴파일해야 합니다. 이때 동적 로딩은 동적링크 라이브러리를 로딩하는 것입니다. Apache에서 동적 링크 라이브러리의 처리는 mod_so 모듈을 통해 완료되므로 mod_so 모듈은 동적으로 로드될 수 없으며 Apache의 핵심으로 정적으로 컴파일될 수만 있습니다. 이는 Apache와 함께 시작된다는 의미입니다.
Apache는 모듈을 어떻게 로드하나요? 먼저 Apache의 구성 파일인 httpd.conf에 다음 줄을 추가해야 합니다.
LoadModule php5_module modules/mod_php5.so
여기서는 LoadModule 명령을 사용합니다. 명령의 첫 번째 매개변수는 모듈의 이름입니다. 이름은 모듈의 소스 코드에서 찾을 수 있습니다. 구현. 두 번째 옵션은 모듈이 있는 경로입니다. 서버가 실행되는 동안 모듈을 로드해야 하는 경우 HUP 또는 AP_SIG_GRACEFUL 신호를 서버에 보낼 수 있습니다. 신호가 수신되면 Apache는 서버를 다시 시작하지 않고 모듈을 다시 로드합니다.
위 내용은 웹 서버의 PHP 작동 모드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!