from:http://www.jb51.net/article/37759.htm
1. Apache의 PHP 실행 모드
Apache에는 세 가지 PHP 실행 모드가 있습니다. 세 가지 작업 모드: CGI 모드, FastCGI 모드, Apache 모듈 DLL
다음을 비교해보세요:
1. CGI 모드와 모듈 모드 비교:
Apache에서 PHP의 두 가지 작업 방식(CGI 모드, Apache 모듈 DLL)의 차이점
이 두 가지 작업 방법 설치:
Apache 2.0의 PHP CGI 접근 방식
ScriptAlias /php/ “c:/php/”
AddType application/x-httpd-php .php
PHP 4의 경우 다음 줄을 사용하세요
Action application/x-httpd-php “/php/php.exe”
PHP 5의 경우
Action application/x-httpd-php “/php/php-cgi.exe”
줄을 사용하세요.
Apache 2.0의 PHP 모듈 모드
PHP 4의 경우 다음 두 줄을 사용하세요.
LoadModule php4_module “c:/php/php4apache2.dll”
잊지 마세요. sapi 디렉토리의 php4apache2.dll 복사에서 다운로드하세요!
AddType application/x-httpd-php .php
PHP 5의 경우 다음 두 줄을 사용하세요.
LoadModule php5_module “c:/php/php5apache2.dll”
AddType application/x-httpd-php .php
php.ini 경로 구성
PHPIniDir “C:/php”
두 가지 작업 방식의 차이점:
CGI 모드에서는 클라이언트가 PHP 파일을 요청하면 웹 서버가 php.exe를 호출하여 파일을 해석한 다음 해석 결과를 웹 페이지 형식으로 클라이언트에 반환합니다.
모듈식(DLL)에서는 PHP가 웹 서버와 함께 시작되고 실행됩니다.
따라서 어떤 관점에서 보면 Apache 모듈 모드로 설치된 PHP4는 CGI 모드보다 보안이 뛰어나고 실행 효율성과 속도가 더 좋습니다.
2. FastCGI 작동 모드 분석:
FastCGI 작동 방식:
(1) 웹 서버가 시작될 때 FastCGI 프로세스 관리자를 로드합니다. [PHP의 FastCGI 프로세스 관리자는 PHP-FPM(php-FastCGI 프로세스 관리자)](IIS ISAPI 또는 Apache 모듈)
(2) FastCGI 프로세스 관리자는 자체적으로 초기화되고 여러 CGI 인터프리터 프로세스(작업 관리자에서 여러 php-cgi.exe를 볼 수 있음)를 시작하고 웹 서버의 연결을 기다립니다.
(3) 클라이언트 요청이 웹 서버에 도달하면 FastCGI 프로세스 관리자는 CGI 인터프리터를 선택하고 연결합니다. 웹 서버는 CGI 환경 변수와 표준 입력을 FastCGI 하위 프로세스 php-cgi.exe로 보냅니다.
(4) FastCGI 하위 프로세스는 처리를 완료한 후 동일한 연결에서 표준 출력 및 오류 정보를 웹 서버로 반환합니다. FastCGI 하위 프로세스가 연결을 닫으면 요청이 처리됩니다. 그런 다음 FastCGI 하위 프로세스는 FastCGI 프로세스 관리자(WebServer에서 실행)의 다음 연결을 기다리고 처리합니다. 일반 CGI 모드에서는 php-cgi.exe가 여기서 종료됩니다.
위의 경우 CGI가 일반적으로 얼마나 느린지 상상할 수 있습니다. PHP에 대한 모든 웹 요청은 php.ini를 다시 구문 분석하고, 모든 dll 확장을 다시 로드하고, 모든 데이터 구조를 다시 초기화해야 합니다. FastCGI를 사용하면 이 모든 작업이 프로세스가 시작될 때 한 번만 발생합니다. 추가 보너스는 지속적인 데이터베이스 연결이 작동한다는 것입니다.
이는 다음과 같은 다양한 고려 사항으로 인해 발생할 수 있습니다.
(1) 어쨌든 Windows 플랫폼에서는 멀티스레드 CGI 인터프리터를 안정적으로 사용할 수 없습니다. IIS ISAPI 방식이든 APACHE 모듈 방식이든 일정 시간 동안 실행하면 항상 충돌이 발생합니다. 이상한가요? 그러나 그러한 상황이 존재합니다!
물론 멀티스레드 CGI 인터프리터를 안정적으로 사용할 수 있는 경우도 많이 있습니다. 하지만 가끔 웹페이지에 오류가 있는 것을 발견할 수도 있고, 어차피 FastCGI로 전환하면 그 이유를 찾을 수 없을 수도 있습니다. 그러한 오류는 크게 줄어들 것입니다. 왜 그런지는 모르겠지만, 결국 독립된 주소 공간을 갖는 CGI 인터프리터가 공유 주소 공간 형태보다 조금 더 안정적일 수도 있다고 생각합니다.
(2) 성능! 성능? 가능합니까? FastCGI가 다중 스레드 CGI 인터프리터보다 더 빠릅니까? 그러나 때로는 그것이 사실이며, 웹사이트를 테스트해야만 최종 결론을 내릴 수 있습니다. 그 이유는 뭐라 말하기는 어려울 것 같은데, Zend WinEnabler 시대에 Zend는 원래 Windows 플랫폼에서 IIS ISAPI나 Apache Module 대신 FastCGI를 사용하는 것을 권장했으나 현재 Zend는 더 이상 이 제품을 만들지 않는다는 정보가 있습니다.
FastCGI 모드에서 PHP를 실행하면 몇 가지 주요 이점이 있습니다. 첫 번째는 PHP가 잘못되면 Apache가 중단되지 않지만 PHP 자체 프로세스가 중단된다는 것입니다(그러나 FastCGI는 중단된 프로세스를 대체하기 위해 새 PHP 프로세스를 즉시 다시 시작합니다). 둘째, FastCGI 모드에서 PHP를 실행하는 성능은 ISAPI 모드보다 좋습니다(원래 ApacheBench를 사용하여 테스트했지만 결과를 저장하는 것을 잊어버렸습니다. 관심이 있으시면 직접 테스트해 볼 수 있습니다).
마지막으로 PHP5와 PHP4를 동시에 실행할 수 있습니다. 아래 구성 파일을 참조하면 두 개의 가상 호스트가 설정되었는데, 하나는 PHP5를 사용하고 다른 하나는 PHP4를 사용합니다.
코드를 복사하면 다음과 같습니다.
LoadModule fastcgi_module 모듈/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ “d:/usr/local/php-5.0.4/”
FastCgiServer “d:/usr/local/php-5.0.4/php-cgi.exe” -프로세스 3
ScriptAlias /fcgi-php4/ “d:/usr/local/php-4.3.11/”
FastCgiServer “d:/usr/local/php-4.3.11/php.exe”
80 듣기
NameVirtualHost *:80
DocumentRoot d:/www
옵션 색인 FollowSymlinks MultiViews
서버 이름 php5.localhost
AddType 애플리케이션/x-httpd-fastphp5 .php
작업 애플리케이션/x-httpd-fastphp5 “/fcgi-php5/php-cgi.exe”
IndexOptions FancyIndexing FoldersFirst
옵션 색인 FollowSymLinks MultiViews
AllowOverride 없음
주문 허용, 거부
모두 허용
8080 듣기
NameVirtualHost *:8080
DocumentRoot d:/www
옵션 색인 FollowSymlinks MultiViews
서버 이름 php4.localhost
AddType 애플리케이션/x-httpd-fastphp4 .php
Action application/x-httpd-fastphp4 “/fcgi-php4/php.exe”
옵션 인덱스 FollowSymLinks MultiViews
AllowOverride 없음
주문 허용, 거부
모든
(1) 如上面所说该两种结构書处理.因此lighttpd와ng inx는 작지만 강력하고 효율적입니다.
同时它는 高并发方face也优于spawn-fcgi,至少不会自动重启fastcgi处理器。具体采用算法과设计可以google了解。
3、IIS+ ISAPI模式这种模式适合开发环境中, 生产环境中用的较少。
目前에는 HTTPServer这块基本可以看到有 3种stack比较流行:
(1)아파치+mod_php5
(2)lighttp+spawn-fcgi
(3)nginx+PHP-FPM
Apache에서 Apache를 사용하는 경우에는 다음과 같은 기능을 사용할 수 있습니다.能会达到Apache+mod_php5의 5~10倍,现에서 nginx+PHP-FPM을 사용하는 사람들은 더 많습니다.