FastCGI 애플리케이션 <>

개요

FastCGI <application> 요소에는 특정 FastCGI 프로세스 풀 정의에 대한 구성 설정이 포함되어 있습니다. FastCGI를 사용하는 경우 IIS는 요소의 <application> maxInstances 특성 값을 사용하여 프로세스 풀에서 실행할 수 있는 FastCGI 프로세스 수를 결정합니다.

가장 간단한 FastCGI 애플리케이션 풀 정의를 사용하려면 요소에 fullPath 특성을 포함하여 특정 애플리케이션 프레임워크에 <application> 사용할 이진 파일을 정의해야 합니다. PHP 프레임워크의 경우 전체Path 특성을 PHP 이진 파일의 디렉터리 및 파일 이름으로 설정합니다.

다른 특성은 선택 사항이며 여러 다른 매개 변수를 구성할 수 있습니다. 여기에는 FastCGI 작업자 프로세스가 재활용되기 전에 처리할 수 있는 최대 요청 수, 애플리케이션 풀에 대한 작업자 프로세스의 최대 수 및 FastCGI 요청이 걸릴 수 있는 최대 시간이 포함됩니다.

참고 항목

FastCGI를 사용하여 요청을 처리하려면 먼저 경로 및 특정 파일 이름 확장명을 FastCGI 모듈에 매핑하고 대상 FastCGI 프로세스를 스크립트 프로세서로 지정해야 합니다.

IIS 7.5의 새로운 기능

IIS 7.5는 요소에 다음 특성을 추가했습니다 <fastCgi>/<application> .

  • monitorChangesTo 특성을 사용하면 FastCGI 애플리케이션의 동작에 영향을 줄 수 있는 변경 내용을 모니터링할 파일을 지정할 수 있습니다. 예를 들어 PHP 프레임워크를 사용하는 경우 PHP를 모니터링하도록 IIS를 구성할 수 있습니다. monitorChangesTo 특성에서 파일의 전체 경로를 지정하여 변경 내용에 대한 INI 파일입니다.
  • stderrMode 특성은 IIS 7이 STDERR 스트림을 통해 FastCGI 애플리케이션에서 반환되는 오류를 처리하는 방법을 지정합니다.
  • signalBeforeTerminateSeconds 특성을 사용하면 IIS가 FastCGI 애플리케이션을 종료해야 한다는 신호를 받은 후 지정된 기간 동안 기다리도록 IIS를 구성할 수 있습니다. 이렇게 하면 IIS가 프로세스를 종료하기 전에 FastCGI 애플리케이션이 모든 설정을 클린 수 있습니다.

호환성

버전 주의
IIS 10.0 <application> IIS 10.0에서 요소가 수정되지 않았습니다.
IIS 8.5 <application> IIS 8.5에서 요소가 수정되지 않았습니다.
IIS 8.0 특성의 maxInstances 기본값이 IIS 8.0에서 40 변경되었습니다.
IIS 7.5 <application> 컬렉션의 <fastCgi> 요소는 monitorChangesTo, stderrModesignalBeforeTerminateSeconds 특성을 사용하여 IIS 7.5에서 업데이트되었습니다.
IIS 7.0 <application> 컬렉션의 <fastCgi> 요소는 IIS 7.0에서 도입되었습니다.
IIS 6.0 해당 없음

설정

FastCGI 환경을 사용하려면 먼저 CGI 역할 서비스를 설치해야 합니다. 설치 프로세스는 CGI(Common Gateway Interface) 역할 서비스를 둘 다 <globalModules> 에 등록합니다 <modules> . FastCGI 환경을 설치하기 위해 다른 단계를 수행할 필요가 없습니다.

Windows Server 2012 또는 Windows Server 2012 R2

  1. 작업 표시줄에서 서버 관리자를 클릭합니다.
  2. 서버 관리자 관리 메뉴를 클릭한 다음 역할 및 기능 추가를 클릭합니다.
  3. 역할 및 기능 추가 마법사에서 다음을 클릭합니다. 설치 유형을 선택하고 다음을 클릭합니다. 대상 서버를 선택하고 다음을 클릭합니다.
  4. 서버 역할 페이지에서 IIS(웹 서버)를 확장하고, 웹 서버를 확장하고, 애플리케이션 개발을 확장한 다음, CGI를 선택합니다. 다음을 클릭합니다.
    서버 역할 대화 상자의 스크린샷. C G I가 검사 강조 표시되어 있습니다.
  5. 기능 선택 페이지에서 다음을 클릭합니다.
  6. 설치 선택 확인 페이지에서 설치를 클릭합니다.
  7. Results(결과) 페이지에서 Close(닫기)를 클릭합니다.

Windows 8 또는 Windows 8.1

  1. 시작 화면에서 포인터를 왼쪽 아래 모서리로 이동하고 시작 단추를 마우스 오른쪽 단추로 클릭한 다음 제어판 클릭합니다.
  2. 제어판 프로그램 및 기능을 클릭한 다음 Windows 기능 켜기 또는 끄기를 클릭합니다.
  3. 인터넷 정보 서비스 확장하고, World Wide Web Services를 확장하고, 애플리케이션 개발 기능을 확장한 다음, CGI를 선택합니다.
    창 기능 대화 상자의 스크린샷. C G I가 확장된 메뉴에서 선택됩니다.
  4. 확인을 클릭합니다.
  5. 닫기를 클릭합니다.

Windows Server 2008 또는 Windows Server 2008 R2

  1. 작업 표시줄에서 시작을 클릭하고 관리istrative Tools를 가리킨 다음 서버 관리자 클릭합니다.
  2. 서버 관리자 계층 구조 창에서 역할을 확장한 다음 웹 서버(IIS)를 클릭합니다.
  3. 웹 서버(IIS) 창에서 Role Services 섹션으로 스크롤한 다음 역할 서비스 추가를 클릭합니다.
  4. 역할 서비스 추가 마법사역할 서비스 선택 페이지에서 CGI를 선택하고 다음을 클릭합니다.
    Role Services 페이지의 스크린샷. C G I가 강조 표시됩니다.
  5. 설치 선택 확인 페이지에서 설치를 클릭합니다.
  6. Results(결과) 페이지에서 Close(닫기)를 클릭합니다.

Windows Vista 또는 Windows 7

  1. 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
  2. 제어판 프로그램 및 기능을 클릭한 다음 Windows 기능 켜기 또는 끄기를 클릭합니다.
  3. 인터넷 정보 서비스 확장한 다음, CGI를 선택한 다음 확인을 클릭합니다.
    Windows 기능 대화 상자의 스크린샷. C G I가 강조 표시됩니다.

방법

IIS 7.0 사용자에 대한 참고: 이 섹션의 일부 단계에서는 FastCGI 설정에 대한 사용자 인터페이스를 포함하는 IIS 7.0용 Microsoft 관리istration Pack을 설치해야 할 수 있습니다. IIS 7.0용 Microsoft 관리istration Pack을 설치하려면 다음 URL을 참조하세요.

PHP에 대한 전역 FastCGI 처리기 매핑을 만드는 방법

참고 항목

다음 프로시저가 작동하려면 지정한 파일 경로 또는 파일 이름 확장명을 실행할 이진 파일이 이미 설치되어 있어야 합니다. 이 예제에서는 www.php.net 사용할 수 있는 PHP 구현을 사용합니다.

  1. IIS(open 인터넷 정보 서비스) 관리자:

    • Windows Server 2012 또는 Windows Server 2012 R2를 사용하는 경우:

      • 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 인터넷 정보 서비스(IIS) 관리자를 클릭합니다.
    • Windows 8 또는 Windows 8.1을 사용하는 경우:

      • Windows 키를 누른 상태로 문자 X를 누른 다음 제어판 클릭합니다.
      • 관리istrative Tools를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
    • Windows Server 2008 또는 Windows Server 2008 R2를 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭하고 관리영구 도구를 가리킨 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows Vista 또는 Windows 7을 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
      • 관리istrative Tools를 두 번 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
  2. 커넥트 창에서 FastCGI 처리기 매핑을 구성할 서버 이름을 클릭합니다.

  3. 창에서 처리기 매핑을 두 번 클릭합니다.
    기본 웹 사이트 홈 페이지의 스크린샷. 처리기 매핑 아이콘이 강조 표시됩니다.

  4. 작업 창에서 모듈 매핑 추가를 클릭합니다.
    처리기 매핑 페이지를 표시하는 I S 관리자 창의 스크린샷

  5. 다음 정보를 입력합니다.

    • 요청 경로 텍스트 상자에 파일 이름 확장명을 입력합니다. 예를 들어 "*.php"입니다.

    • 모듈 드롭다운 목록에서 FastCgiModule 을 클릭합니다.

    • 실행 상자에 스크립팅 엔진의 경로를 입력합니다. 예를 들어 "C:\PHP\php-cgi.exe"입니다.

    • 이름 상자에 처리기 매핑의 고유한 이름을 입력합니다. 예를 들어 "PHP-FastCGI"입니다.

      모듈 매핑 추가 대화 상자의 스크린샷.

    • 요청 제한 클릭

    • 요청이 매핑된 경우에만 Invoke 처리기를 선택합니다.

    • 파일 또는 폴더 옵션을 선택하려면 클릭합니다.

    • 확인을 클릭합니다.

      요청 제한 대화 상자의 스크린샷.

  6. 확인을 클릭합니다.

  7. 모듈 매핑 추가 대화 상자에서 FastCGI 애플리케이션을 만들라는 메시지가 표시되면 [예]를 클릭합니다.

    모듈 매핑 정보 추가 대화 상자의 스크린샷.

    참고 항목

    이렇게 하면 방금 만든 처리기 매핑에 대한 FastCGI 애플리케이션이 자동으로 만들어집니다. 아니요를 선택하면 나중에 FastCGI 애플리케이션을 수동으로 만들 수 있습니다.

PHP용 FastCGI 애플리케이션을 만드는 방법

참고 항목

다음 프로시저가 작동하려면 지정한 파일 경로 또는 파일 이름 확장명을 실행할 이진 파일이 이미 설치되어 있어야 합니다. 이 예제에서는 www.php.net 사용할 수 있는 PHP 구현을 사용합니다.

참고 항목

FastCGI 애플리케이션을 추가해도 처리기 매핑이 자동으로 추가되지는 않습니다. 이렇게 하려면 이 문서의 PHP 섹션에 대한 전역 FastCGI 처리기 매핑을 만드는 방법의 단계를 따릅니다.

  1. IIS(open 인터넷 정보 서비스) 관리자:

    • Windows Server 2012 또는 Windows Server 2012 R2를 사용하는 경우:

      • 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 인터넷 정보 서비스(IIS) 관리자를 클릭합니다.
    • Windows 8 또는 Windows 8.1을 사용하는 경우:

      • Windows 키를 누른 상태로 문자 X를 누른 다음 제어판 클릭합니다.
      • 관리istrative Tools를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
    • Windows Server 2008 또는 Windows Server 2008 R2를 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭하고 관리영구 도구를 가리킨 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows Vista 또는 Windows 7을 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
      • 관리istrative Tools를 두 번 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
  2. 커넥트 창에서 FastCGI 설정을 구성할 서버 이름을 클릭합니다.

  3. 창에서 FastCGI 설정 두 번 클릭합니다.

    서버 홈 페이지의 스크린샷. 설정 빠른 C G가 강조 표시되어 있습니다.

  4. 작업 창에서 애플리케이션 추가를 클릭합니다.

    I S Manager의 Fast C G 설정 페이지 스크린샷.

  5. FastCGI 애플리케이션 추가 대화 상자에서 다음 정보를 입력합니다.

    • 전체 경로 상자에 스크립팅 엔진의 경로를 입력합니다. 예를 들어 "C:\PHP\php-cgi.exe"입니다.

    • FastCGI 애플리케이션에 대한 최대 요청 수를 입력합니다.

      참고 항목

      PHP의 경우 이 숫자는 PHP_FCGI_MAX_REQUESTS 환경 변수를 사용하여 구성된 PHP 환경에 대한 최대 요청 수보다 작거나 같아야 합니다.

      빠른 CG I 애플리케이션 추가 대화 상자의 스크린샷.

  6. EnvironmentVariables 옆에 있는 줄임표(...)를 클릭하여 환경 변수 컬렉션 편집기를 엽니다.

  7. EnvironmentVariables 컬렉션 편집기 대화 상자에서 추가를 클릭합니다.

    환경 변수 컬렉션 편집기 대화 상자의 스크린샷

  8. 다음 정보를 입력한 다음 확인을 클릭합니다.

    • 이름에 "PHP_FCGI_MAX_REQUESTS"를 입력합니다.

    • 값에 "10000"을 입력합니다.

      환경 변수 컬렉션 편집기 대화 상자의 스크린샷 P H P F C G I 최대 요청은 멤버 필드에 강조 표시됩니다.

  9. 확인을 클릭하여 FastCGI 애플리케이션 추가 대화 상자를 닫 습니다.

PHP용 FastCGI 환경 변수를 추가하는 방법

참고 항목

다음 프로시저가 작동하려면 지정한 파일 경로 또는 파일 이름 확장명을 실행할 이진 파일이 이미 설치되어 있어야 합니다. 이 예제에서는 www.php.net 사용할 수 있는 PHP 구현을 사용합니다.

  1. IIS(open 인터넷 정보 서비스) 관리자:

    • Windows Server 2012 또는 Windows Server 2012 R2를 사용하는 경우:

      • 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 인터넷 정보 서비스(IIS) 관리자를 클릭합니다.
    • Windows 8 또는 Windows 8.1을 사용하는 경우:

      • Windows 키를 누른 상태로 문자 X를 누른 다음 제어판 클릭합니다.
      • 관리istrative Tools를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
    • Windows Server 2008 또는 Windows Server 2008 R2를 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭하고 관리영구 도구를 가리킨 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows Vista 또는 Windows 7을 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
      • 관리istrative Tools를 두 번 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
  2. 커넥트 창에서 FastCGI 설정을 구성할 서버 이름을 클릭합니다.

  3. 창에서 FastCGI 설정 두 번 클릭합니다.

    I S Manager의 서버 홈페이지 스크린샷. 설정 Fast C G에 대한 THe 아이콘이 강조 표시됩니다.

  4. FastCGI 설정 창에서 PHP 애플리케이션을 강조 표시한 다음 작업 창에서 편집클릭합니다.

    I S Manager 내의 Fast C G 설정 페이지 스크린샷.

  5. FastCGI 애플리케이션 편집 대화 상자에서 EnvironmentVariables 옆에 있는 줄임표(...)를 클릭하여 환경 변수 컬렉션 편집기를 엽니다.

    빠른 CG I 애플리케이션 편집 대화 상자의 스크린샷.

  6. EnvironmentVariables 컬렉션 편집기 대화 상자에서 추가를 클릭합니다.

    환경 변수 컬렉션 편집기 창의 스크린샷.

  7. 다음 정보를 입력한 다음 확인을 클릭합니다.

    • 이름에 "PHP_FCGI_MAX_REQUESTS"를 입력합니다.

    • 값에 "10000"을 입력합니다.

      환경 변수 컬렉션 편집기 창의 스크린샷. P H P F C G I가 강조 표시되어 있습니다.

  8. 확인을 클릭하여 FastCGI 애플리케이션 추가 대화 상자를 닫 습니다.

구성

ApplicationHost.config 파일의 서버 수준 또는 Web.config 파일의 사이트 수준, 애플리케이션 수준 또는 디렉터리 수준에서 요소를 구성할 <application> 수 있습니다.

특성

특성 설명
activityTimeout 선택적 uint 특성입니다.

FastCGI 프로세스를 처리하는 데 걸리는 최대 시간(초)을 지정합니다. 허용되는 값은 10에서 3600까지의 범위에 있습니다.

IIS 7.0의 기본값은 30IIS 7.5의 기본값입니다 70.
arguments 선택적 문자열 특성입니다.

FastCGI 프로세스에 대한 명령줄 인수를 지정합니다.
flushNamedPipe 선택적 부울 특성입니다.

각 요청이 끝날 때 명명된 파이프가 플러시되는지 여부를 지정합니다. 이 속성은 명명된 파이프 프로토콜이 사용되는 경우에만 적용됩니다.

기본값은 false입니다.
fullPath 필수 문자열 특성입니다.

FastCGI 프로세스의 전체 경로를 지정합니다.
idleTimeout 선택적 uint 특성입니다.

프로세스가 종료되기 전에 FastCGI 프로세스를 유휴 상태로 설정할 수 있는 최대 시간(초)을 지정합니다. 허용되는 값은 10에서 604800까지의 범위에 있습니다.

기본값은 300입니다.
instanceMaxRequests 선택적 uint 특성입니다.

재활용되기 전에 각 FastCGI 작업자 프로세스에서 처리할 수 있는 최대 요청 수를 지정합니다. 허용되는 값은 1에서 10000000까지의 범위에 있습니다.

기본값은 200입니다.
maxInstances 선택적 uint 특성입니다.

애플리케이션 풀에서 시작할 수 있는 FastCGI 작업자 프로세스의 최대 수를 지정합니다. 허용되는 값은 0에서 10000까지의 범위에 있습니다.

기본값은 0입니다.
monitorChangesTo 옵션 문자열 특성입니다.

변경 내용을 모니터링할 파일의 전체 경로를 지정합니다. 파일 변경 내용이 검색되면 IIS는 특성에 fullPath 지정된 FastCGI 애플리케이션을 종료하고 다시 시작합니다.

참고: 이 특성은 IIS 7.5에 추가되었습니다.

기본값이 없습니다.
protocol 선택적 열거형 특성입니다.

FastCGI 프로세스와 통신하는 데 사용되는 전송 메커니즘을 지정합니다.

프로토콜 특성은 다음과 같은 가능한 값 중 하나일 수 있습니다.
설명
NamedPipe 명명된 파이프 프로토콜은 FastCGI 작업자 프로세스와 통신하는 데 사용됩니다.
Tcp TCP 프로토콜은 FastCGI 작업자 프로세스와 통신하는 데 사용됩니다.
기본값은 NamedPipe입니다.
queueLength 선택적 uint 특성입니다.

FastCGI 프로세스 풀에 대해 큐에 대기할 수 있는 최대 요청 수를 지정합니다. 허용되는 값은 1에서 10000000까지의 범위에 있습니다.

기본값은 1000입니다.
requestTimeout 선택적 uint 특성입니다.

FastCGI 프로세스 요청에 걸릴 수 있는 최대 시간(초)을 지정합니다. 허용되는 값은 10에서 604800까지의 범위에 있습니다.

기본값은 90입니다.
signalBeforeTerminateSeconds 선택적 uint 특성입니다.

IIS가 FastCGI 애플리케이션을 종료해야 한다는 신호를 받은 후 IIS가 대기하는 시간을 지정합니다. 이 특성이 0보다 큰 값으로 설정되면 IIS는 상속 가능한 이벤트를 만들고 이벤트에 대한 핸들 값을 환경 변수 값 _FCGI_SHUTDOWN_EVENT_ 으로 FastCGI 프로세스에 전달합니다.

참고: 이 특성은 IIS 7.5에 추가되었습니다.

기본값은 0입니다.
stderrMode 선택적 열거형 특성입니다.

IIS가 FastCGI 애플리케이션이 STDERR 스트림에서 반환하는 오류에 사용할 동작을 지정합니다.

참고: 이 특성은 IIS 7.5에 추가되었습니다.

stderrMode 특성은 다음과 같은 가능한 값 중 하나일 수 있습니다.
설명
ReturnStdErrIn500 IIS가 HTTP 500 오류를 반환하고 STDERR 스트림의 콘텐츠를 클라이언트에 표시하도록 지정합니다. (참고: IIS 7.0 동작과 일치합니다.)

숫자 값은 .입니다 0.
ReturnGeneric500 IIS가 일반 HTTP 500 오류를 클라이언트에 반환하도록 지정합니다. 이렇게 하면 STDERR 스트림의 콘텐츠가 클라이언트로 반환되지 않습니다.

숫자 값은 .입니다 1.
IgnoreAndReturn200 IIS가 STDERR 스트림의 텍스트를 무시하고 HTTP 200 오류를 반환하고 STDOUT 스트림의 콘텐츠를 클라이언트에 반환하도록 지정합니다.

숫자 값은 .입니다 2.
TerminateProcess IIS가 FastCGI 프로세스를 종료하고 일반 HTTP 500 오류를 클라이언트에 반환하도록 지정합니다.

숫자 값은 .입니다 3.
기본값은 ReturnStdErrIn500입니다.

자식 요소

요소 설명
environmentVariables 선택적 요소입니다.

IIS가 FastCGI 애플리케이션에 전달할 환경 변수 컬렉션을 지정합니다.

구성 샘플

다음 구성 샘플에서는 PHP용 FastCGI 애플리케이션을 추가하고, instanceMaxRequests 특성을 "10000"으로 설정하고, PHP_FCGI_MAX_REQUESTS 환경 변수를 "10000"으로 설정합니다.

<fastCgi>
   <application fullPath="C:\PHP\php-cgi.exe"
         arguments=""
         maxInstances="4"
         idleTimeout="300"
         activityTimeout="30"
         requestTimeout="90"
         instanceMaxRequests="10000"
         protocol="NamedPipe"
         flushNamedPipe="false">
      <environmentVariables>
         <environmentVariable
            name="PHP_FCGI_MAX_REQUESTS"
            value="10000" />
      </environmentVariables>
   </application>
</fastCgi>

참고 항목

PHP의 경우 PHP_FCGI_MAX_REQUESTS 환경 변수의 값은 FastCGI <application> 요소의 instanceMaxRequests 특성에 지정된 값보다 작거나 같은 숫자여야 합니다.

다음 구성 샘플에서는 PHP 파일에 대한 전역 FastCGI 처리기 매핑을 IIS에 추가하고 FastCGI 실행 파일의 전체 경로를 지정합니다.

<configuration>
   <location path="" overrideMode="Allow">
      <system.webServer>
         <handlers>
            <add name="PHP-FastCGI"
                path="*.php"
                verb="GET,HEAD,POST"
                modules="FastCgiModule"
                scriptProcessor="C:\PHP\php-cgi.exe"
                resourceType="Either"
                requireAccess="Script" />
         </handlers>
      </system.webServer>
   </location>
</configuration>

참고 항목

FastCGI 설정은 특별히 형식이 지정된 FastCGI 애플리케이션을 사용하고 처리기 매핑을 통해 사이트별로 구성할 수 있습니다. 이 매핑은 FastCGI 프로세스에 대한 <application> 매핑에서 <handlers> 요소의 fullPath인수 특성을 해당 scriptProcessor 특성과 일치시켜 구별됩니다. 이러한 매핑을 만들려면 요소에 대한 fullPath인수 특성의 설정을 FastCGI 프로세스 매핑의 scriptProcessor 특성에 <handlers> 추가하고 파이프 "|" <application> 문자로 구분해야 합니다. 이 조합은 각 FastCGI 애플리케이션에 대한 고유한 키 역할을 합니다. 예를 들어 다음 구성 발췌문에서는 두 개의 사이트별 PHP 처리기에 대한 두 가지 예제 <fastCgi>/<application> 요소와 해당 <처리기> 매핑을 보여 줍니다.

<fastCgi>
   <application fullPath="C:\PHP\php-cgi.exe"
      arguments="-d open_basedir=C:\Websites\Website1" />
   <application fullPath="C:\PHP\php-cgi.exe"
      arguments="-d open_basedir=C:\Websites\Website2" />
</fastCgi>

<system.webServer>
   <handlers accessPolicy="Read, Script"> 
      <add name="PHP via FastCGI 1"
         path="*.php"
         verb="*"
         modules="FastCgiModule"
         scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website1"
         resourceType="Unspecified"
         requireAccess="Script" />
      <add name="PHP via FastCGI 2"
         path="*.php"
         verb="*"
         modules="FastCgiModule"
         scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website2"
         resourceType="Unspecified"
         requireAccess="Script" />
</handlers>
</system.webServer>

예제 코드

다음 코드 샘플에서는 PHP용 FastCGI 애플리케이션을 추가하고 instanceMaxRequests 특성을 "10000"으로 설정하고 PHP_FCGI_MAX_REQUESTS 환경 변수를 "10000"으로 설정합니다. 또한 각 샘플은 PHP 파일에 대한 전역 FastCGI 처리기 매핑을 IIS에 추가하고 FastCGI 실행 파일의 전체 경로를 지정합니다.

Appcmd.exe

appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\PHP\php-cgi.exe',arguments='',maxInstances='4',idleTimeout='300',activityTimeout='30',requestTimeout='90',instanceMaxRequests='10000',protocol='NamedPipe',flushNamedPipe='False']" /commit:apphost

appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\PHP\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']" /commit:apphost

appcmd.exe set config -section:system.webServer/handlers /+"[name='PHP-FastCGI',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='C:\PHP\php-cgi.exe',resourceType='Either',requireAccess='Script']" /commit:apphost

참고 항목

AppCmd.exe 사용하여 이러한 설정을 구성할 때 커밋 매개 변수 apphost 를 설정해야 합니다. 그러면 ApplicationHost.config 파일의 적절한 위치 섹션에 구성 설정이 커밋됩니다.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection fastCgiSection = config.GetSection("system.webServer/fastCgi");
         ConfigurationElementCollection fastCgiCollection = fastCgiSection.GetCollection();
         ConfigurationElement applicationElement = fastCgiCollection.CreateElement("application");
         applicationElement["fullPath"] = @"C:\PHP\php-cgi.exe";
         applicationElement["arguments"] = @"";
         applicationElement["maxInstances"] = 4;
         applicationElement["idleTimeout"] = 300;
         applicationElement["activityTimeout"] = 30;
         applicationElement["requestTimeout"] = 90;
         applicationElement["instanceMaxRequests"] = 10000;
         applicationElement["protocol"] = @"NamedPipe";
         applicationElement["flushNamedPipe"] = false;

         ConfigurationElementCollection environmentVariablesCollection = applicationElement.GetCollection("environmentVariables");
         ConfigurationElement environmentVariableElement = environmentVariablesCollection.CreateElement("environmentVariable");
         environmentVariableElement["name"] = @"PHP_FCGI_MAX_REQUESTS";
         environmentVariableElement["value"] = @"10000";
         environmentVariablesCollection.Add(environmentVariableElement);
         fastCgiCollection.Add(applicationElement);

         ConfigurationSection handlersSection = config.GetSection("system.webServer/handlers");
         ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
         ConfigurationElement addElement = handlersCollection.CreateElement("add");
         addElement["name"] = @"PHP-FastCGI";
         addElement["path"] = @"*.php";
         addElement["verb"] = @"GET,HEAD,POST";
         addElement["modules"] = @"FastCgiModule";
         addElement["scriptProcessor"] = @"C:\PHP\php-cgi.exe";
         addElement["resourceType"] = @"Either";
         addElement["requireAccess"] = @"Script";
         handlersCollection.AddAt(0, addElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim fastCgiSection As ConfigurationSection = config.GetSection("system.webServer/fastCgi")
      Dim fastCgiCollection As ConfigurationElementCollection = fastCgiSection.GetCollection
      Dim applicationElement As ConfigurationElement = fastCgiCollection.CreateElement("application")
      applicationElement("fullPath") = "C:\PHP\php-cgi.exe"
      applicationElement("arguments") = ""
      applicationElement("maxInstances") = 4
      applicationElement("idleTimeout") = 300
      applicationElement("activityTimeout") = 30
      applicationElement("requestTimeout") = 90
      applicationElement("instanceMaxRequests") = 10000
      applicationElement("protocol") = "NamedPipe"
      applicationElement("flushNamedPipe") = False

      Dim environmentVariablesCollection As ConfigurationElementCollection = applicationElement.GetCollection("environmentVariables")
      Dim environmentVariableElement As ConfigurationElement = environmentVariablesCollection.CreateElement("environmentVariable")
      environmentVariableElement("name") = "PHP_FCGI_MAX_REQUESTS"
      environmentVariableElement("value") = "10000"
      environmentVariablesCollection.Add(environmentVariableElement)
      fastCgiCollection.Add(applicationElement)

      Dim handlersSection As ConfigurationSection = config.GetSection("system.webServer/handlers")
      Dim handlersCollection As ConfigurationElementCollection = handlersSection.GetCollection
      Dim addElement As ConfigurationElement = handlersCollection.CreateElement("add")
      addElement("name") = "PHP-FastCGI"
      addElement("path") = "*.php"
      addElement("verb") = "GET,HEAD,POST"
      addElement("modules") = "FastCgiModule"
      addElement("scriptProcessor") = "C:\PHP\php-cgi.exe"
      addElement("resourceType") = "Either"
      addElement("requireAccess") = "Script"
      handlersCollection.AddAt(0, addElement)

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST");
var fastCgiCollection = fastCgiSection.Collection;
var applicationElement = fastCgiCollection.CreateNewElement("application");
applicationElement.Properties.Item("fullPath").Value = "C:\\PHP\\php-cgi.exe";
applicationElement.Properties.Item("arguments").Value = "";
applicationElement.Properties.Item("maxInstances").Value = 4;
applicationElement.Properties.Item("idleTimeout").Value = 300;
applicationElement.Properties.Item("activityTimeout").Value = 30;
applicationElement.Properties.Item("requestTimeout").Value = 90;
applicationElement.Properties.Item("instanceMaxRequests").Value = 10000;
applicationElement.Properties.Item("protocol").Value = "NamedPipe";
applicationElement.Properties.Item("queueLength").Value = 1000;
applicationElement.Properties.Item("flushNamedPipe").Value = false;
applicationElement.Properties.Item("rapidFailsPerMinute").Value = 10;

var environmentVariablesCollection = applicationElement.ChildElements.Item("environmentVariables").Collection;
var environmentVariableElement = environmentVariablesCollection.CreateNewElement("environmentVariable");
environmentVariableElement.Properties.Item("name").Value = "PHP_FCGI_MAX_REQUESTS";
environmentVariableElement.Properties.Item("value").Value = "10000";
environmentVariablesCollection.AddElement(environmentVariableElement);
fastCgiCollection.AddElement(applicationElement);

var handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST");
var handlersCollection = handlersSection.Collection;
var addElement = handlersCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "PHP-FastCGI";
addElement.Properties.Item("path").Value = "*.php";
addElement.Properties.Item("verb").Value = "GET,HEAD,POST";
addElement.Properties.Item("modules").Value = "FastCgiModule";
addElement.Properties.Item("scriptProcessor").Value = "C:\\PHP\\php-cgi.exe";
addElement.Properties.Item("resourceType").Value = "Either";
addElement.Properties.Item("requireAccess").Value = "Script";
handlersCollection.AddElement(addElement, 0);

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST")
Set fastCgiCollection = fastCgiSection.Collection
Set applicationElement = fastCgiCollection.CreateNewElement("application")
applicationElement.Properties.Item("fullPath").Value = "C:\PHP\php-cgi.exe"
applicationElement.Properties.Item("arguments").Value = ""
applicationElement.Properties.Item("maxInstances").Value = 4
applicationElement.Properties.Item("idleTimeout").Value = 300
applicationElement.Properties.Item("activityTimeout").Value = 30
applicationElement.Properties.Item("requestTimeout").Value = 90
applicationElement.Properties.Item("instanceMaxRequests").Value = 10000
applicationElement.Properties.Item("protocol").Value = "NamedPipe"
applicationElement.Properties.Item("queueLength").Value = 1000
applicationElement.Properties.Item("flushNamedPipe").Value = false
applicationElement.Properties.Item("rapidFailsPerMinute").Value = 10

Set environmentVariablesCollection = applicationElement.ChildElements.Item("environmentVariables").Collection
Set environmentVariableElement = environmentVariablesCollection.CreateNewElement("environmentVariable")
environmentVariableElement.Properties.Item("name").Value = "PHP_FCGI_MAX_REQUESTS"
environmentVariableElement.Properties.Item("value").Value = "10000"
environmentVariablesCollection.AddElement(environmentVariableElement)
Call fastCgiCollection.AddElement(applicationElement)

Set handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST")
Set handlersCollection = handlersSection.Collection
Set addElement = handlersCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "PHP-FastCGI"
addElement.Properties.Item("path").Value = "*.php"
addElement.Properties.Item("verb").Value = "GET,HEAD,POST"
addElement.Properties.Item("modules").Value = "FastCgiModule"
addElement.Properties.Item("scriptProcessor").Value = "C:\PHP\php-cgi.exe"
addElement.Properties.Item("resourceType").Value = "Either"
addElement.Properties.Item("requireAccess").Value = "Script"
Call handlersCollection.AddElement(addElement, 0)

adminManager.CommitChanges()