PHP를 기반으로 한 다양한 웹서버의 동작모드에 대한 자세한 설명

WBOY
풀어 주다: 2016-08-08 09:29:32
원래의
889명이 탐색했습니다.

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. 멀티 스레드 CGI 인터프리터 대신 FastCGI를 사용하는 이유는 무엇입니까?

    이는 다음과 같은 다양한 고려 사항으로 인해 발생할 수 있습니다.
    (1) 어쨌든 Windows 플랫폼에서는 멀티스레드 CGI 인터프리터를 안정적으로 사용할 수 없습니다. IIS ISAPI 방식이든 APACHE 모듈 방식이든 일정 시간 동안 실행하면 항상 충돌이 발생합니다. 이상한가요? 그러나 그러한 상황이 존재합니다!
    물론 멀티스레드 CGI 인터프리터를 안정적으로 사용할 수 있는 경우도 많이 있습니다. 하지만 가끔 웹페이지에 오류가 있는 것을 발견할 수도 있고, 어차피 FastCGI로 전환하면 그 이유를 찾을 수 없을 수도 있습니다. 그러한 오류는 크게 줄어들 것입니다. 왜 그런지는 모르겠지만, 결국 독립된 주소 공간을 갖는 CGI 인터프리터가 공유 주소 공간 형태보다 조금 더 안정적일 수도 있다고 생각합니다.
    (2) 성능! 성능? 가능합니까? FastCGI가 다중 스레드 CGI 인터프리터보다 더 빠릅니까? 그러나 때로는 그것이 사실이며, 웹사이트를 테스트해야만 최종 결론을 내릴 수 있습니다. 그 이유는 뭐라 말하기는 어려울 것 같은데, Zend WinEnabler 시대에 Zend는 원래 Windows 플랫폼에서 IIS ISAPI나 Apache Module 대신 FastCGI를 사용하는 것을 권장했으나 현재 Zend는 더 이상 이 제품을 만들지 않는다는 정보가 있습니다.

  2. FastCGI 모드에서 PHP를 실행할 때의 장점:

    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 없음
주문 허용, 거부
모든

FastCGI 模式的一些缺点:
나는 FastCGI를 사용하여 FastCGI를 사용합니다.说就不平适.因为当使用 Zend Studio 调试程序时,由于FastCGI는 PHP 进程超时, 从而에서 500 错误를 지원합니다.
Windows 中以 FastCGI에서 模式存재潜현재안
두 번째, php 재nginx 中运行模式(nginx+PHP-FPM )目前目想选择

使用 FastCGI 方式现재 정말 많은 것 같아요 스택: ligthttpd+spawn-fcgi; 另외일种是nginx+PHP-FPM(也可以用spawn-fcgi) 。

(1) 如上面所说该两种结构書处理.因此lighttpd와ng inx는 작지만 강력하고 효율적입니다.

(2) 该两者还可以分个好坏来,spawn-fcgi由于是lighttpd的一分,因此安装了lighttpd一般就会使用spawn-fcgi对php支持,但是目前有户说ligttpd 의 spwan-fcgi는 高并发访问의 时候, 会出现上泄漏甚至自动启fastcgi에 있습니다.问的话,可能就会出现白页(即PHP不能被解析或者带了).

另一个:首先nginx不imagelighttpd本身含带了fastcgi(spawn-fcgi),因此它完全是轻weight级的,必须借助第3방적 FastCGI处理器才可以对PHP를 실행하는 방법은 nginx를 사용하지 않는 nginx와 비교하여 3방과 함께 사용하는 방식으로 처리합니다. PHP의 설명(여기nginx.conf中很容易设置)。

nginx는 以使사용spwan-fcgi(需要一同安装lighttpd, 但是需要为nginx避开端口, 一些较早의 블로그유유방면안드바이크), 但是由于spawn-fcgi具유상면所述的用户逐渐发现的缺陷,现에서 nginx+spawn-fcgi합체를 사용합니다.

c. spawn-fcgi의 缺陷, 现에서 새로운 第三方(目前还是,听说是에서 努力不久将来加入到PHP core中)의 PHP FastCGI处理器,叫做PHP-FPM(具体可以google)。它와spawn -fcgi比较起来有如下优点:

由于它是작동 PHP 패치补丁来开发的, 安装的时候需要和php源码一起编译,也就是说编译到php core中了 ,因此 性能방법면要优秀一些;

同时它는 高并发方face也优于spawn-fcgi,至少不会自动重启fastcgi处理器。具体采用算法과设计可以google了解。

因此,如上所说由于nginx의 조회수와灵活性, 因此目前性能优越, 越来越多人逐渐使用这个组合:nginx+PHP/PHP-FPM

3、IIS+ ISAPI模式这种模式适合开发环境中, 生产环境中用的较少。

4、总结

目前에는 HTTPServer这块基本可以看到有 3种stack比较流行:
(1)아파치+mod_php5
(2)lighttp+spawn-fcgi
(3)nginx+PHP-FPM
Apache에서 Apache를 사용하는 경우에는 다음과 같은 기능을 사용할 수 있습니다.能会达到Apache+mod_php5의 5~10倍,现에서 nginx+PHP-FPM을 사용하는 사람들은 더 많습니다.

以上就介绍了基于php는 웹사이트에서 사용할 수 있는 이동 수단입니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿