php 기반 각종 웹 서버 실행 모드 상세 설명

1.php 가 apache 에서 실행 모드 php 는 apache 에서 모두 세 가지 작업 방식 이 있 습 니 다.CGI 모드,FastCGI 모드,Apache 모듈 DLL 이하 의 비교:1.CGI 모드 와 모듈 모드 비교:php 는 apache 에서 두 가지 작업 방식 의 차이(CGI 모드,Apache 모듈 DLL)이 두 가지 작업 방식 의 설치:PHP 는 Apache 2.0 의 CGI 방식 ScriptAlias/php/"c:/php/"AddType application/x-httpd-php.php\#PHP 4 에 이 줄 Action application/x-httpd-php"/php.exe"\#PHP 5 에 이 줄 Action application/x-httpd-php"/php-cgi.exe"PHP 는 Apache 2.0 의 모듈 방식 으로\#PHP 4 에 이 두 줄 을 사용 합 니 다.LoadModule php4_module"c:/phop/phop 4 apache2.dll"\#sapi 디 렉 터 리 에서 phop 4 apache2.dll 을 복사 하 는 것 을 잊 지 마 세 요!AddType application/x-httpd-php.php\#PHP 5 에 이 두 줄 을 사용 합 니 다:LoadModule php 5module"c:/php/php5apache 2.dll"AddType application/x-httpd-phop.php\#php.ini 의 경 로 를 설정 합 니 다.PHPIniDir"C:/phop"두 가지 작업 방식 의 차이 점:CGI 모드 에서 클 라 이언 트 가 phop 파일 을 요청 하면 웹 서버 는 phop.exe 를 호출 하여 이 파일 을 설명 한 다음 에 설명 결 과 를 웹 페이지 로 되 돌려 줍 니 다.모듈 화(DLL)에 서 는 PHP 가 웹 서버 와 함께 시작 되 고 실행 된다.그래서 어떻게 보면 apache 모듈 방식 으로 설 치 된 PHP 4 는 CGI 모드 보다 더 좋 은 안전성 과 더 좋 은 실행 효율 과 속 도 를 가진다.2.FastCGI 실행 모드 분석:FastCGI 의 작업 원 리 는 다음 과 같 습 니 다.(1)웹 서버 가 시 작 될 때 FastCGI 프로 세 스 관리 자 를 불 러 옵 니 다.[PHP 의 FastCGI 프로 세 스 관리 자 는 PHP-FPM(pp-FastCGI Process Manager)](IIS ISAPI 또는 Apache Module);(2)FastCGI 프로 세 스 관리자 자체 가 초기 화 되 어 여러 개의 CGI 해석 기 프로 세 스 를 시작 합 니 다(작업 관리자 에서 여러 개의 php-cgi.exe 를 볼 수 있 습 니 다).웹 서버 에서 연결 을 기다 리 고 있 습 니 다.(3)클 라 이언 트 가 웹 서버 에 도착 할 것 을 요청 할 때 FastCGI 프로 세 스 관리자 가 선택 하고 CGI 해석 기 에 연결 합 니 다.웹 서버 는 CGI 환경 변수 와 표준 입력 을 FastCGI 하위 프로 세 스 php-cgi.exe 에 보 냅 니 다.(4),FastCGI 하위 프로 세 스 를 처리 한 후 표준 출력 과 오류 정 보 를 같은 연결 에서 웹 서버 로 되 돌려 줍 니 다.FastCGI 하위 프로 세 스 가 연결 을 닫 았 을 때 요청 이 완료 되 었 습 니 다.FastCGI 하위 프로 세 스 는 FastCGI 프로 세 스 관리자(웹 서버 에서 실행)의 다음 연결 을 기다 리 고 처리 합 니 다.정상 적 인 CGI 모드 에서 php-cgi.exe 가 종료 되 었 습 니 다.위 와 같은 상황 에서 CGI 가 보통 얼마나 느 린 지 상상 할 수 있다.모든 웹 요청 PHP 는 php.ini 를 다시 해석 하고 모든 dll 확장 을 다시 불 러 오 며 모든 데이터 구 조 를 초기 화해 야 합 니 다.FastCGI 를 사용 하면 모든 것 이 프로 세 스 가 시 작 될 때 만 발생 합 니 다.추가 적 인 장점 은 지속 적 인 데이터베이스 연결(Persistent database connection)이 작 동 할 수 있다 는 것 이다.3.다 중 스 레 드 CGI 해석 기 대신 FastCGI 를 사용 하 는 이 유 는 무엇 입 니까?이것 은 여러 가지 측면 에서 고려 할 수 있 습 니 다.예 를 들 어(1)windows 플랫폼 에서 다 중 스 레 드 CGI 해석 기 를 안정 적 으로 사용 할 수 없습니다.IIS ISAPI 방식 이 든 APACHE Module 방식 이 든 그들 은 항상 한 동안 실행 하면 무 너 집 니 다.이상해?하지만 이런 경우 가 있다!물론 다 중 스 레 드 CGI 해석 기 를 안정 적 으로 사용 할 수 있 는 경우 도 많 지만 웹 페이지 에 오류 가 발생 할 수 있 습 니 다.어떻게 든 원인 을 찾 지 못 하고 FastCGI 방식 으로 바 꿀 때 이러한 오류 의 확률 이 크게 낮 아 집 니 다.왜 그런 지 잘 모 르 겠 습 니 다.주소 공간 을 독립 시 키 고 싶 은 CGI 해석 기 는 주소 공간 을 공유 하 는 형식 보다 조금 안정 적 일 수 있 습 니 다.(2)성능!성능가능 합 니까?다 중 스 레 드 CGI 해석 기 보다 FastCGI 가 더 빠 릅 니까?하지만 가끔 은 그렇다.당신 의 사 이 트 를 테스트 해 봐 야 결론 을 내 릴 수 있다.그 이 유 는 말 하기 어 려 울 것 같 지만 Zend WinEnabler 시대 에 Zend 도 IIS ISAPI 나 Apache Module 이 아 닌 Windows 플랫폼 에서 FastCGI 를 사용 하 는 것 을 권장 했다 는 자료 가 있 었 지만 지금 은 Zend 가 이 제품 을 만 들 지 않 는 다.4.FastCGI 모드 에서 PHP 를 실행 하 는 장점:FastCGI 모드 로 PHP 를 실행 하 는 것 은 몇 가지 주요 장점 이 있 습 니 다.우선 PHP 가 잘못 되 었 을 때 아파 치 를 무 너 뜨리 지 않 습 니 다.단지 PHP 자신의 프로 세 스 가 떨 어 졌 을 뿐 입 니 다.(단,FastCGI 는 떨 어 진 프로 세 스 대신 새 PHP 프로 세 스 를 즉시 다시 시작 합 니 다.)그 다음 에 FastCGI 모드 에서 PHP 를 실행 하 는 것 이 ISAPI 모드 보다 성능 이 좋 습 니 다.마지막 으로 PHP 5 와 PHP 4 를 동시에 실행 할 수 있다.아래 설정 파일 을 참고 하여 각각 두 개의 가상 호스트 를 만 들 었 습 니 다.하 나 는 PHP 5 를 사용 하고 다른 하 나 는 PHP 4 를 사용 합 니 다.

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" -processes 3
ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"
FastCgiServer "d:/usr/local/php-4.3.11/php.exe"
Listen 80
NameVirtualHost *:80
DocumentRoot d:/www
Options Indexes FollowSymlinks MultiViews
ServerName php5.localhost
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"

IndexOptions FancyIndexing FoldersFirst
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all

Listen 8080
NameVirtualHost *:8080

DocumentRoot d:/www
Options Indexes FollowSymlinks MultiViews
ServerName php4.localhost
AddType application/x-httpd-fastphp4 .php
Action application/x-httpd-fastphp4 "/fcgi-php4/php.exe"

Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
위의 설정 을 사용 하여 접근 합 니 다.http://localhost/ PHP 5 로 접근http://localhost:8080/ PHP 4 를 사용 합 니 다.따라서 합 리 적 으로 설정 하면 서로 다른 가상 호스트 가 서로 다른 버 전의 PHP 를 사용 할 수 있다.FastCGI 모드 의 단점:좋 은 점도 말 하고 단점 도 말한다.제 실제 사용 을 보면 FastCGI 모드 가 생산 환경 에 더 적합 한 서버 입 니 다.하지만 개발 용 기 계 는 적절 하지 않다.Zend Studio 디 버 깅 프로그램 을 사용 할 때 FastCGI 는 PHP 프로 세 스 가 시간 을 초과 했다 고 생각 하기 때문에 페이지 에서 500 오 류 를 되 돌려 줍 니 다.이 점 은 사람 을 매우 화 나 게 하기 때문에 나 는 기 계 를 개발 하 는 데 있어 서 여전히 ISAPI 모델 로 바 꾸 었 다.마지막 으로 윈도 에서 FastCGI 모드 로 잠재 적 인 안 투,php 가 nginx 에서 실행 모드(nginx+PHP-FPM)를 선택 할 수 있 습 니 다. FastCGI 방식 을 사용 하면 현재 흔히 볼 수 있 는 stack:ligthttpd+spawn-fcgi 두 가지 가 있 습 니 다.다른 하 나 는 nginx+PHP-FPM(spawn-fcgi 로 도 사용 가능)입 니 다.(1)위 에서 말 한 바 와 같이 이 두 구 조 는 모두 FastCGI 로 PHP 를 지원 하기 때문에 HTTPServer 가 완전히 해방 되 어 응답 과 병행 처 리 를 더욱 잘 할 수 있다.그래서 lighttpd 와 nginx 는 모두 small,but powerful 과 efficient 라 는 명성 을 가지 고 있 습 니 다.2)이 두 가 지 는 좋 고 나 쁨 을 나 눌 수 있 습 니 다.spawn-fcgi 는 lighttpd 의 일부분 이기 때문에 lighttpd 를 설치 하면 일반적으로 spawn-fcgi 를 사용 하여 phop 에 지원 합 니 다.그러나 현재 ligttpd 의 spwan-fcgi 는 높 은 병행 방문 시 위 에서 말 한 메모리 누 출 이 발생 하고 fastcgi 를 자동 으로 다시 시작 합 니 다.즉,PHP 스 크 립 트 프로세서 가 켜 져 있 습 니 다.이 럴 때 사용자 가 접근 하면 백 페이지 가 나타 날 수 있 습 니 다.(즉,PHP 가 해석 되 거나 오류 가 발생 할 수 없습니다.)또 다른:우선 nginx 는 lighttpd 자체 에 fastcgi(spawn-fcgi)가 포함 되 어 있 지 않 기 때문에 경량급 입 니 다.제3자 FastCGI 프로 세 서 를 통 해 PHP 를 해석 할 수 있 습 니 다.따라서 nginx 는 매우 유연 합 니 다.이 는 제3자 가 분석 하 는 프로세서 와 연결 하여 PHP 에 대한 분석 을 실현 할 수 있 습 니 다(nginx.conf 에서 쉽게 설정 할 수 있 습 니 다).nginx 는 spwan-fcgi 를 사용 할 수 있 습 니 다.c.spawn-fcgi 의 결함 으로 인해 현재 새로운 제3자 가 생 겼 습 니 다.이 는 spawn-fcgi 와 비교 해 보면 다음 과 같은 장점 이 있 습 니 다.PHP 패 치 패 치 로 개발 되 었 기 때문에 설치 할 때 phop 소스 코드 와 함께 컴 파일 해 야 합 니 다.즉,phop core 에 컴 파일 되 었 기 때문에 성능 이 우수 합 니 다.또한 높 은 병발 처리 에 있어 서도 spawn-fcgi 보다 좋 으 며,적어도 fastcgi 프로 세 서 를 자동 으로 다시 시작 하지 않 습 니 다.구체 적 으로 사용 한 알고리즘 과 디자인 은 구 글 에서 알 수 있 습 니 다.따라서 위 에서 말 한 바 와 같이 nginx 의 경 량 과 유연성 때문에 현재 성능 이 우수 하기 때문에 점점 더 많은 사람들 이 이 조합 을 사용 하고 있다.nginx+PHP/PHP-FPM 3,IIS+ISAPI 모델 은 개발 환경 에 적합 하고 생산 환경 에서 사용 하 는 것 이 비교적 적다.4.현재 HTTPServer 에서 세 가지 stack 이 유행 하 는 것 을 볼 수 있 습 니 다.(1)Apache+modphp 5(2)lighttp+spawn-fcgi(3)nginx+PHP-FPM 세 가지 후 두 가지 성능 이 약간 좋 을 수 있 지만 아파 치 는 모듈 과 기능 이 풍부 하기 때문에 현재 로 서 는 여전히 맏이 이다.nginx+PHP-FPM 이 높 은 병발 상황 에서 Apache+mod 에 도달 할 수 있 음 을 테스트 하 는 사람 이 있 습 니 다.php 5 의 5~10 배,현재 nginx+PHP-FPM 을 사용 하 는 사람 이 많아 지고 있 습 니 다.

좋은 웹페이지 즐겨찾기