나는 항상 ISAPI 모드에서 PHP를 실행해 왔습니다. 이 방법의 가장 큰 단점은 PHP가 잘못되면 Apache 프로세스도 종료된다는 것입니다. 나중에 인터넷에서 FastCGI 모드에서 실행되는 PHP에 대한 소개를 보았습니다. 언급된 다양한 이점(안정성, 보안, 고성능)을 보고 한 번 사용해 보기로 결정했습니다.
그러나 상황은 기대만큼 원활하게 진행되지 않았습니다. Google에서 수없이 검색했지만 Windows에서 PHP를 실행하기 위해 Apache + FastCGI를 사용하는 방법에 대한 정보를 찾을 수 없었습니다. IIS + FastCGI를 사용하여 PHP를 실행하는 사람들이 꽤 있습니다. 기사 중 하나에서는 Zend가 FastCGI 모드( http://phplens.com/phpeverywhere/fastcgi-php )에서 PHP를 실행할 것을 권장한다고 언급했습니다.
몇 시간의 탐색 끝에 마침내 Apache 1.3 + FastCGI를 구현하여 PHP를 실행하는 데 성공했습니다.
준비:
먼저 http://www.fastcgi.com/dist/를 방문하여 Apache용 mod_fastcgi를 다운로드하세요. mod_fastcgi-2.4.2-AP13.dll을 사용하고 있습니다. 다운로드 후 이 파일을 Apache의 모듈 디렉터리에 복사합니다.
PHP를 다운로드하고(저는 PHP-5.0.4를 사용하고 있습니다) 압축을 풀고 필요에 따라 php.ini 파일을 수정합니다. PHP 디렉터리에서 Windows 디렉터리로 파일을 복사할 필요는 없습니다.
구성 수정:
그런 다음 httpd.conf 파일을 수정하고 다음 줄을 추가합니다:
LoadModule fastcgi_module modules/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
# 참고: 여기서 -processes 3은 3개의 php-cgi.exe 프로세스를 시작한다는 의미입니다.
# FastCgiServer의 자세한 매개변수는 FastCGI 문서를 참고하세요.
AddType 애플리케이션/x-httpd-fastphp5 .php
작업 application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
# 설명: PHP 파일의 위치에 따라 위의 두 굵은 글씨 단어를 수정하세요.
수정이 완료되면 Apache를 다시 시작하면 됩니다.
FAQ:
나의 많은 실험에 따르면 가장 일반적인 문제는 주로 경로로 인해 발생합니다. 따라서 먼저 php.ini 및 httpd.conf 파일의 모든 경로가 올바른지 확인하십시오. 두 번째는 이전에 시스템에 PHP가 설치된 경우 C:Windowsphp.ini의 이름을 바꾸거나 삭제해야 한다는 것입니다.
둘째, PHP 파일이 있는 디렉터리에 충분한 권한이 있는지 확인합니다. (저는 모든 사람 - 모든 권한으로 설정했습니다. 어쨌든 개발 컴퓨터에서는 그렇게 많은 보안 제한을 고려할 필요가 없습니다.)
FastCGI 모드에서 PHP를 실행할 때의 장점:
FastCGI 모드에서 PHP를 실행하면 몇 가지 주요 이점이 있습니다. 첫 번째는 PHP가 실패하면 Apache가 중단되지 않지만 PHP 자체 프로세스가 중단된다는 것입니다(그러나 FastCGI는 중단된 프로세스를 대체하기 위해 새 PHP 프로세스를 즉시 다시 시작합니다). 둘째, FastCGI 모드는 ISAPI 모드보다 PHP를 실행할 때 성능이 더 좋습니다(원래 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 application/x-httpd-fastphp5 .php
작업 application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
IndexOptions Fancy인덱싱 폴더 우선
옵션 색인 FollowSymLinks MultiViews
AllowOverride 없음
주문 허용, 거부
모두에서 허용
8080 들어보세요
이름VirtualHost *:8080
문서루트:/www
옵션 색인 FollowSymlinks MultiViews
서버 이름 php4.localhost
AddType application/x-httpd-fastphp4 .php
작업 application/x-httpd-fastphp4 "/fcgi-php4/php.exe"
옵션 색인 FollowSymLinks MultiViews
AllowOverride 없음
주문 허용, 거부
모두에서 허용
위 구성을 사용하면 http://localhost/ 에 접근할 때 PHP5가 사용되고, http://localhost:8080/ 에 접근할 때 PHP4가 사용됩니다. 따라서 올바르게 구성되기만 하면 서로 다른 가상 호스트는 서로 다른 버전의 PHP를 사용할 수 있습니다.
FastCGI 모드의 몇 가지 단점:
장점을 얘기한 뒤 단점을 얘기해보자. 실제 사용해본 결과 FastCGI 모드는 프로덕션 환경의 서버에 더 적합합니다. 그러나 개발 기계에는 적합하지 않습니다. Zend Studio를 사용하여 프로그램을 디버깅할 때 FastCGI는 PHP 프로세스가 시간 초과되었다고 생각하고 페이지에 500 오류를 반환하기 때문입니다. 이것이 너무 짜증나서 개발 컴퓨터에서 ISAPI 모드로 다시 전환했습니다.
마지막으로 Windows의 FastCGI 모드에는 잠재적인 보안 취약점이 있습니다. Windows 환경에서 SuEXEC를 구현하는 방법을 찾지 못했기 때문에 PHP 프로세스는 항상 가장 높은 권한으로 실행되는데 이는 분명히 보안 관점에서 좋은 소식이 아닙니다.
결론:
이 기사에서 FastCGI를 적용하는 것은 아직 매우 초기 단계에 있으며 보다 성숙한 솔루션이 등장하기를 바라는 출발점으로만 사용됩니다.