ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [펌] IIS7, FastCGI, windows server 2008
    컴터 2010. 5. 28. 18:34

    IIS7 에서 PHP cgi 와 Fastcgi 성능 비교

         

    www.wssplex.net

    다음 동영상은,. TechNet Edge(http://edge.technet.com/) 올라온 동영상으로 IIS7 에서 일반적으로 설치되는 PHP 와 Fastcgi 를 이용한 PHP 의 성능 비교를 간략하게 볼수 있는 동영상입니다.



    Video: Getting PHP to perform on IIS7
     


    원본주소: http://edge.technet.com/Media/393/

    동 영상 내용은, Cgimodule 과 Fastcgi 와 비교 / Output Cache / 이미지 Copyright 등에 대한 내용이며, 영어인데 그냥 내용만 봐도 될정도로 이해하기 쉽습니다.


    FastCGI Extension for IIS6: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1521
    FastCGI for IIS7: http://www.iis.net/downloads/default.aspx?tabid=34&i=1299&g=6

         

    http://daybreaker.springnote.com/pages/1722942.xhtml

       

    [Windows server 2008] IIS 7 에서 FastCGI 를 이용한 PHP 구성

       

    www.wssplex.net

    Windows Server 2008 IIS 7 에서는 FastCgi 모듈이 내장 되어 있으며, 설정 또한 applicationHost.config 에서 설정하도록 되어 있으며 사이트 단위로도 설정이 가능합니다.

    <fastCgi>
       <application fullPath="C:\inetpub\php-5.2.6-nts-Win32\php-cgi.exe" />
    </fastCgi>

    <handlers accessPolicy="Read, Script">
       <add name="PHPFastCgi" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\inetpub\php-5.2.6-nts-Win32\php-cgi.exe" resourceType="Unspecified" />
    </handlers>


    (Vista 의 경우에는 Windows Server 2008 이 나오기전의 IIS 7 버젼이라서 FastCgi 모듈을 별도로 설치해 줘야 하는데, Service Pack 1를 설치하는 경우에는 내장되어 있습니다.)
    CGI 가속 기능을 지원하는 FastCgi 를 이용할려면 다음 처럼, CGI 구성요소가 설치가 되어야 합니다.



    IIS 의 CGI 모듈 설치가 완료가 되면, 그 다음으로 PHP 를 다운 받아서 설치를 합니다.

    http://windows.php.net/download/

    PHP 의 버젼은 VC9 버전의 Installer 버전 보다는 zip 패키지 설치를 권장하고 있으며, 또한 쓸 데 없는 체크를 하지 않도록 Non-thread-safe 버젼을 설치하는 것이 좋습니다.


    그외, php.ini 의 기본적인 설정은 보통의 php 구성과 같으며,. 다만 기존의 FastCgi 를 이용하지 않고 ISAPI 모드나 CGI 모드에처럼 dll 파일이나 ini 파일을 복사하는 등의 과정은 필요 없습니다.



    PHP 를 호스팅하기 위해서는 처리기 매핑 - 모듈 매핑 추가 에서 위와 같은 형식으로 추가를 해줍니다. 혹은 Installer를 사용했다면, 설치과정 중에 <php확장자 등록>을 체크하면 됩니다. 요청 제한 옵션중에는 동사부분에서 GET,POST,HAED,DEBUG 등 기본 동사만 허용하도록 해주는 것이 좋습니다.

    그 다음으로, php 가 정상적으로 작동하는지 확인하기 위해서 웹사이트 폴더에 <?php phpinfo(); ?> 와 같은 내용이 들어간 .php 파일을 호출해서 다음과 같이 나오면 PHP가 FastCgi 를 이용하여 정상적으로 작동이 되는 것입니다.



    FastCgi 옵션에 따라서 다르지만,. 작업 관리자에 보면 php-cgi.exe가 설정값에 따라서 몇개가 실행중이고 어느정도 작동후 종료후 새로운 php-cgi.exe가 생성되는 재생도 작동 됩니다.


    그외,. 재생 설정은 다음과 같이 appcmd 를 이용하여 설정이 가능합니다.

    C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath='c:\{php_folder}\php-cgi.exe'].instanceMaxRequests:10000

    C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /+[fullPath='c:\{php_folder}\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS', value='10000']



    물론 applicationHost.config 파일을 열어서 직접 추가/수정을 해줘도 상관은 없습니다. FastCgi 노드에서의 그외 속성값은 iis 6에서 설치된 fcgiext.ini 을 참고해 보시면 좋을것 같습니다.



    또 는 위와 같이, Administration Pack for IIS 7.0 을 설치하면 FastCGI Settings 를 통해서도 GUI 상에서 설정이 가능합니다.

    <fastCgi>
        <application fullPath="C:\inetpub\php-5.2.6-nts-Win32\php-cgi.exe" maxInstances="4" instanceMaxRequests="10000">
     <environmentVariables>
         <environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000" />
     </environmentVariables>
        </application>
    </fastCgi>



    속 성이름이 대부분 명시적이어서 무슨 의미인지 이해하는데 어렵지는 않을것 입니다.

    ps,.

    FastCgi 에서 호출되는 CGI 는 기본값으로는 Network Service 계정에서 호출을 합니다.

    실행 CGI 가 있는 폴더는 Windows 기본값에서는 Users 그룹에 권한이 되어 있으므로 호출에는 문제가 없으나, 보안 강화를 위해서 Administrators 외 제외를 하였다면,. 적절한 권한 설정이 필요합니다.

       

       

       

    IIS7 + FastCGI + PHP + MySQL 설치 방법

    http://daybreaker.springnote.com/pages/1722942

    IIS7 설치

    IIS7 이상 버전을 사용하려면 Vista 또는 Server 2008을 써야 한다. 필자는 Vista만 써봤으므로 그것을 기준으로 하겠다.

    1. 제어판 -> 프로그램 -> Windows 기능 추가/제거로 들어가 Windows 기능 창을 연다.
    2. 인터넷 정보 서비스 -> 웹 관리 도구를 체크한다. (FTP 등 필요한 것을 더 체크해도 된다.)
    3. 확인 눌러서 설치.
    4. 웹브라우저에서 http://localhost 또는 http://127.0.0.1을 열고 환영 페이지가 나오는지 확인한다.
      기본 웹디렉토리는 C:\inetpub\wwwroot\이므로, UAC 없이 접근하려면 이 폴더의 속성 -> 보안 탭에서 자신의 사용자 계정에 모든 권한을 허가해주면 좀더 편하게 쓸 수 있다.

    ※ Vista SP1부터는 IIS7 자체에 FastCGI 모듈이 내장되어 있으므로 그것을 쓰면 된다.

    PHP 설치

    •    

      php.net에서 최신 PHP 버전을 받아 설치한다. (5.2 이상 버전 권장, 글 쓰는 현재 5.2.6이 최신 버전임)
      이때 installer보다는 zip package를 권장하는데, 그 이유는 isntaller는 설치는 편리하지만 확장 기능(gd, mysql 등등)이 하나도 안 들어있기 때문이다. 나중에 zip package를 받아 확장기능 폴더만 복사해넣어도 되긴 하나 한 번에 하는 게 편하니까 zip package로 바로 하자.

      • FastCGI를 이용하면 각 연결을 각각의 독립된 프로세스가 처리하게 되므로, 최대한의 성능을 내기 위해 non-thread-safe 패키지를 이용하는 것이 좋다.
    • 적당한 디렉토리에 압축을 푼다.
      zip으로 받았을 경우는 그냥 편하게 C:\php에 풀지만, installer로 하면 C:\Program Files\PHP에 설치되므로 참고한다. 여기서는 C:\PHP에 깔았다고 가정하겠다.
    • IIS 관리자를 열고 왼쪽의 트리에서 사이트 -> Default Web Site를 클릭하면 오른쪽에 관련 작업 아이콘들이 나타난다.
    • 그중 [처리기 매핑]을 더블클릭하고, 오른쪽의 작업 메뉴에서 [모듈 매핑 추가...]를 누른다.
    • 추가 대화상자에서 [요청 경로] : "*.php", [모듈] : "FastCgiModule", [실행 파일 (옵션)] : "C:\PHP\php-cgi.exe", [이름] : "적당히 알아서. 필자는 PHP via FastCGI로 설정했음." 와 같이 설정하고 확인을 누른다.
    • 웹디렉토리(wwwroot)에 info.php를 만들고 "<?php phpinfo(); ?>"라고 써넣은 다음 http://localhost/info.php를 쳐보자.
      웹브라우저에 php 정보 화면이 나오면 잘 된 것이다.

    Tips!

    MySQL 설치

    1. mysql.com에 서 적당한 버전을 받아 설치한다. 64bit 운영체제를 사용하더라도, php의 64bit용 Windows binary가 제공되지 않으므로 32bit를 쓰는 것이 편하다.
      패키지 중에 Windows Essentials를 받으면 무리 없다.
      (64bit와도 연동은 가능하지만 설정 과정에서 약간의 귀찮음이 있다.)
    2. 설치 완료 후 MySQL Server Instance Config Wizard를 실행한다.
      설정 과정에서 root 암호 및 기본 인코딩(기본 인코딩은 UTF-8 권장) 등을 지정하고, 커맨드 프롬프트에서 바로 실행할 수 있도록 PATH 추가 옵션을 체크해준다.
    3. PHP에서 인식시키기 위해, C:\PHP\php.ini에서 주석처리되어 있는 extension=php_mysql.dll을 주석 해제한다. (줄 앞에 붙은 세미콜론을 지워준다)
      내용이 없으면 적당한 곳에 추가해주면 된다. 취향에 따라 gd, mysqli, curl 등등을 켜준다.
    4. MySQL 설치된 폴더 안의 bin 폴더에 들어있는 libMYSQL.dll을 C:\Windows\System32 (32bit 윈도의 경우) / C:\Windows\SysWOW64 (64bit 윈도의 경우)에 복사한다.
    5. 다시 http://localhost/info.php를 열고 mysql 모듈이 잘 올라왔는지 확인한다. 만약 안 보일 경우 IIS 관리자에서 사이트를 재시작해준다.
    6. 커맨드 프롬프트에서 mysql -uroot -p를 실행하여 사용자 계정 등을 설정한다. 자세한 건 검색. -_-
    7. 간단한 php 스크립트를 만들어 접속 여부를 테스트해본다.

     

    URL rewrite 2.0 설치

     

    http://www.iis.net/download/URLRewrite

     

    직접 설치할 경우 윈도우 웹 매니지먼트 서비스를 중지하고 설치하라고 나옵니다.

    Services.msc 에서 찾아서 정지하고 설치 후 다시 시작 시켰습니다.