개요
IIS의 FastCGI 모듈을 사용하면 FastCGI 프로토콜을 지원하는 널리 사용되는 응용 프로그램 프레임워크를 IIS 웹서버에서 고성능 및 안정적인 방식으로 호스팅 할 수 있습니다. FastCGI는 첫 번째 릴리스 이후 지원되는 IIS 기능 세트의 일부인 웹 서버와 외부 응용 프로그램을 연결하는 표준 방법인 CGI (Common Gateway Interface)의 고성능 대안을 제공합니다.
CGI 프로그램은 요청을 처리하고 동적 응답을 생성 한 후 클라이언트로 다시 전송되는 각 요청에 대해 웹 서버가 실행하는 실행 파일입니다. 이러한 많은 프레임워크는 멀티 스레드 실행을 지원하지 않기 때문에 CGI를 사용하면 프로세스당 정확히 하나의 요청을 실행하여 IIS에서 안정적으로 실행할 수 있습니다. 불행히도 각 요청에 대한 프로세스 시작 및 종료 비용이 높기 때문에 성능이 떨어집니다.
FastCGI는 많은 요청에 대해 하나의 프로세스를 반복적으로 재사용하는 메커니즘을 제공함으로써 CGI의 고유 한 성능 문제를 해결합니다. 또한 FastCGI는 재사용 가능한 프로세스 풀을 제공하고 각 프로세스가 한 번에 하나의 요청만 처리하도록함으로써 스레드 안전하지 않은 라이브러리와의 호환성을 유지합니다.
IIS에서 FastCGI 지원 사용
WINDOWS SERVER 2008
서버 관리자 -> 역할 -> 역할 서비스 추가로 이동합니다. 역할 서비스 선택 페이지에서 CGI 확인란을 선택합니다.
이렇게하면 CGI 및 FastCGI 서비스를 모두 사용할 수 있습니다.
PHP 설치 및 구성
IIS FastCGI에서 PHP의 non-thread safe build를 사용하는 것이 좋습니다. PHP의 non-thread safe build는 FastCGI가 단일 스레드 실행 환경을 보장하기 때문에 필요하지 않은 스레드 안전성 검사를 수행하지 않아도 표준 빌드보다 상당한 성능 향상을 제공합니다.
PHP를 설치하려면:
1. PHP의 바이너리로 최신 non-thread safe 패키지를 다운로드 http://www.php.net/downloads.php
2. 파일을 원하는 디렉토리 (예 : C:\PHP)에 압축을 풉니다. php.ini 권장 파일의 이름을 php.ini로 변경하십시오.
3. php.ini 파일을 엽니다. 주석 처리를 제거하고 다음과 같이 설정을 수정하십시오.
- fastcgi.impersonate = 1. 을 설정합니다. IIS의 FastCGI는 호출 클라이언트의 보안 토큰을 가장하는 기능을 지원합니다. 이를 통해 IIS는 요청이 실행되는 보안 컨텍스트를 정의 할 수 있습니다.
- 설정 cgi.fix_pathinfo = 1. cgi.fix_pathinfo는 CGI에 대한 * real* PATH_INFO/PATH_TRANSLATED 지원을 제공합니다.
이전에는 PHP의 동작이 PATH_TRANSLATED를 SCRIPT_FILENAME으로 설정하고 PATH_INFO를 정의하지 않았습니다. PATH_INFO에 대한 자세한 정보는 cgi 스펙을 참조하십시오. 이 값을 1로 설정하면 PHP CGI가 경로를 수정하여 사양을
준수하게됩니다.
- 설정 cgi.force_redirect = 0.
- 웹사이트(들)의 내용이 있는 폴더 또는 네트워크 경로를 가리키도록의 open_basedir 을 설정합니다.
- 설정을 extension_dir은 PHP extension이 있는 위치를 지정합니다. 일반적 PHP 5.2.X 대한 값을
extension_dir = "./ext"로 설정합니다.
- 해당 줄의 주석을 해제하여 필수 PHP Extension을 활성화합니다.
예를 들어 : extension = mssql.dll
extension = mysql.dll
4. 명령 프롬프트를 열고 다음 명령을 실행하여 PHP가 성공적으로 설치되었는지 확인하십시오.
C:\PHP>php -info
PHP가 올바르게 설치되고 모든 의존성이 시스템에서 사용 가능하면이 명령은 현재 PHP 구성 정보를 출력합니다.
PHP 요청을 처리하도록 IIS 구성
IIS가 PHP 응용 프로그램을 호스팅하려면 FastCGI 프로토콜을 사용하여 PHP 응용 프로그램 프레임 워크에 모든 PHP 관련 요청을 전달하도록 IIS에 지시하는 처리기 매핑을 추가해야합니다.
IIS 관리자를 사용하여 PHP 요청을 처리하도록 IIS 구성
1. IIS 관리자를 엽니다. 서버 수준에서 처리기 매핑을 두 번 클릭합니다.
2. Action pane에서 모듈 매핑 추가를 클릭합니다. ... 다음과 같은 추가 모듈 매핑 대화 상자에서 구성 설정을 지정합니다.
- 요청 경로 : *.php
- 모듈 : FastCgiModule
- 실행 : "C:\[PHP설치경로]\php-cgi.exe"
- 이름 : PHP via FastCGI
3. 확인을 클릭합니다.
4. 이 실행에 대한 FastCGI 응용 프로그램을 만들려면 묻는 모듈 추가 매핑 확인 대화 상자에서 예를 클릭합니다.
5. 다음 코드가 포함된 C:\inetpub\wwwroot폴더에 phpinfo.php 파일을 작성하여 처리기 매핑이 올바르게 작동하는지 테스트합니다.
<?php phpinfo(); ?>
6. 브라우저를 열고 http://localhost/phpinfo.php로 이동하십시오. 모든 것이 올바르게 설정되면 표준 PHP 정보 페이지가 표시됩니다.
참고 : 모듈에 FastCgiModule 표시되지 않는 경우 : 목록에서 모듈이 등록되지 않았거나 사용할 수 없습니다. FastCGI 모듈이 등록되어 있는지 확인하려면 %windir%\WINDOWS\system32\config\applicationHost.config 파일에 있는 IIS 구성 파일을 열고 다음 줄의 <globalModules>섹션에 있는지 확인하십시오.
<add name="FastCgiModule" image="%windir%\System32\inetsrv\iisfcgi.dll" />
동일한 파일에서 FastCGI 모듈이 <modules> 섹션에 추가되었는지 확인하십시오.
<add name = "FastCgiModule" />
명령 줄을 사용하여 PHP 요청을 처리하도록 IIS 구성
또는 명령 줄 도구 AppCmd를 사용하여 위의 단계를 완료 할 수 있습니다.
1. 다음 명령을 실행하여 FastCGI 응용 프로그램 프로세스 풀을 만듭니다.
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI/+[fullPath='c:\{php_folder}\php-cgi.exe']
2. 다음 명령을 실행하여 처리기 매핑을 만듭니다.
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /+[name='PHP_via_FastCGI', path='*.php', verb='*', modules='FastCgiModule ', scriptProcessor ='c:\{php_folder}\php-cgi.exe', resourceType ='Unspecified']
참고 : PHP 버전 4.X를 사용하는 경우 php.exe가 대신 PHP-cgi.exe를 사용할 수 있습니다.
FastCGI 및 PHP 구성에 대한 유용한 정보
이 다운로드 공유 호스팅 환경에서 PHP를 호스팅하기위한 모범 사례에 대한 요약 발표가 포함되어 있습니다.
PHP 웹 사이트의 보안 격리
공유 호스팅 환경에서 PHP 웹 사이트를 격리하기 위한 권장 사항은 IIS에 대한 모든 일반적인 보안 격리 권장 사항과 일치합니다. 특히 다음을 수행하는 것이 좋습니다.
- 웹 사이트 당 하나의 응용 프로그램 풀 사용
- 전용 사용자 계정을 응용 프로그램 풀의 ID로 사용
- 응용 프로그램 풀 ID를 사용하도록 익명의 사용자 ID 구성
- php.ini 파일에서 FastCGI 가장이 활성화되었는지 확인하십시오 (fastcgi.impersonate = 1)
공유 호스팅 환경에서 보안 격리에 대한 자세한 내용을 참조 웹 사이트에 대한 보안 격리를 확인합니다 .
PHP 프로세스 재활용 동작
FastCGI를 항상에서 네이티브 PHP 재활용 하기 전에 PHP-cgi.exe 프로세스를 재활용 있는지 확인합니다. FastCGI 프로세스 재활용 동작은 구성 등록 instanceMaxRequests에 의해 제어된다. 이 등록 정보는 FastCGI 프로세스가 재활용하기 전에 처리 할 요청 수를 지정합니다. PHP는 환경 변수 PHP_FCGI_MAX_REQUESTS에 의해 제어되는 비슷한 프로세스 재생 기능이 있습니다. 보다 작거나 PHP_FCGI_MAX_REQUESTS 동일하게 instanceMaxRequests을 설정하면 네이티브 PHP 프로세스 재생 논리 킥 결코 보장 할 수 있습니다.
FastCGI 설정은 IIS 관리자를 사용하거나 명령 줄 도구 AppCmd를 사용하여 하나 구성 할 수 있습니다.
IIS 관리자를 사용하여 FastCGI 재활용 설정 구성
1. 있는지 확인 IIS에 대한 관리 팩이 서버에 설치되어 있습니다. IIS 관리자를 엽니 다. 서버 수준에서 FastCGI를 설정을 두 번 클릭합니다.
2. 구성 할 FastCGI 응용 프로그램을 선택합니다. 작업 창에서 편집 ...을 클릭합니다.
3. 편집은 FastCGI 응용 프로그램 대화 상자에서이 10000에 InstanceMaxRequests을 설정합니다. 하여 환경 변수 설정 옆의 찾아보기 (...) 버튼을 클릭합니다.
4. 하여 환경 변수 컬렉션 편집기 대화 상자에서 PHP_FCGI_MAX_REQUESTS 환경 변수를 추가하고 10000의 값을 설정합니다.
참고 :이 설정을 구성하지 않으면 다음과 같은 기본 설정이 사용됩니다 : instanceMaxRequests = 200, PHP_FCGI_MAX_REQUESTS = 500 (대부분의 PHP 빌드).
명령 줄을 사용하여 FastCGI 재활용 설정 구성
다음 명령을 실행하여 APPCMD 명령어를 사용하여 FastCGI를 그리고 PHP의 재활용 동작을 구성합니다
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.exe set config -section:system.webServer/fastCgi/+"[fullPath='C:\{php_folder}\ php-cgi.exe' name='PHP_FCGI_MAX_REQUESTS', 값='10000']"
PHP 버전 관리
많은 PHP 응용 프로그램은 특정 버전의 PHP에서만 사용할 수있는 기능이나 기능에 의존합니다. 이러한 유형의 응용 프로그램을 동일한 서버에서 호스팅하려면 다른 PHP 버전을 사용하도록 설정하고 나란히 실행해야합니다. IIS FastCGI 처리기는 동일한 웹 서버에서 여러 버전의 PHP 실행을 완벽하게 지원합니다.
예를 들어 웹 서버에서 PHP 4.4.8, PHP 5.2.1 및 PHP 5.2.5 비 스레드 안전을 지원한다고 가정합니다. 해당 구성을 사용하려면 해당 PHP 바이너리를 파일 시스템의 별도 폴더 (예 : C:\php448\, C:\php521\ 및 C:\php525nts)에 배치 한 다음 각 버전에 대해 FastCGI 응용 프로그램 프로세스 풀을 만들어야합니다.
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI/+[fullPath='c:\php448\php.exe ']
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI/+[fullPath='c:\php521\php-cgi.exe ']
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI/+[fullPath='c:\php525nts\php-cgi.exe ']
3개의 웹 사이트 (site1, site2, site3)가 있고 각 사이트가 다른 PHP 버전을 사용해야하는 경우 이제 해당 사이트의 핸들러 매핑을 정의하여 해당 FastCGI 응용 프로그램 프로세스 풀을 참조 할 수 있습니다.
참고 : 각 FastCGI 프로세스 풀을 고유하게 fullpath에 및 인수 속성의 조합에 의해 식별됩니다.
C:\>%windir%\system32\inetsrv\appcmd set config site1 -section:system.webServer/handlers/+"..[name='PHP448_via_FastCGI',path='*.php',verb='* ', modules = 'FastCgiModule', scriptProcessor = 'c:\php448\php.exe', resourceType = 'Either']
C:\>%windir%\system32\inetsrv\appcmd set config site2 -section:system.webServer/handlers/+"..[name='PHP521_via_FastCGI',path='*.php',verb='* ', modules = 'FastCgiModule', scriptProcessor = 'c:\php521\php-cgi.exe', resourceType = 'Either']
C:\>%windir%\system32\inetsrv\appcmd set config site3 -section:system.webServer/handlers/+"..name = 'PHP525nts_via_FastCGI',path='*.php',verb='* ', modules = 'FastCgiModule', scriptProcessor = 'c:\php525nts\php-cgi.exe', resourceType = 'Either']
PHP 보안 권장 사항
다음 설정을 사용하여 PHP 설치의 보안을 강화할 수 있습니다. 권장 변경 사항을 적용하려면 php.ini 파일을 찾아서 열고 아래 설명 된대로 구성 설정을 편집하십시오.
설정 |
설명 |
allow_url_fopen = Off allow_url_include = Off |
파일 처리 기능을 위한 원격 URL을 비활성화합니다. 이로 인해 코드 삽입 취약점이 발생활 수 있습니다. |
register_globals = Off |
register_globals를 비활성화 합니다. |
open_basedir = "c:\inetpub\" |
PHP프로세서가 파일 시스템에서 읽고 쓸 수 있는 위치를 제한합니다. |
safe_mode = Off safe_mode_gid=Off |
안전 모드를 비활성화 합니다. |
max_excution_time = 30 max_input_time=60 |
스크립트 실행 시간 제한 |
memory_limit = 16M upload_max_filesize=2M post_max_size=8M max_input_nesting_levels=64 |
메모리 사용 및 파일 크기를 제한 하십시오 |
display_errors = Off log_errors = On error_log = "C:\path\of\your\choice" |
오류 메세지 및 로깅을 구성하십시오 |
fastcgi.logging = 0 |
PHP FastCGI프로토콜은 PHP가 FastCGI로깅을 비활성화하여 PHP가 stderr에 대한 오류 정보를 보내지 않고 클라이언트 대한 500개의 응답코드를 생성하지 못하도록 합니다. |
expose_php = Off |
PHP 의 존재를 숨김니다. |
사이트 별 PHP 구성 활성화
이 섹션에서는 사이트 별 PHP 구성을 활성화하는 권장 방법에 대해 설명합니다. 이 권장 사항은 발견 및 호스팅 제공 업체에 Radney Jasmin에 의해 검증된 GoDaddy.com 이제 PHP를 FastCGI를 사용하여 Windows Server 2008에서 호스팅 제공합니다.
사이트 당 PHP 프로세스 풀
각 웹 사이트에 IIS에서 권장되는 방법인 자체 응용 프로그램 풀이 있으면 전용 FastCGI 프로세스 풀을 각 웹 사이트와 연결할 수 있습니다. FastCGI 프로세스 풀을 고유하게 fullpath에 및 인수 속성의 조합에 의해 식별됩니다. 당신은 PHP-cgi.exe와 같은 프로세스 실행을 위한 여러 FastCGI 프로세스 풀을 작성해야하는 경우, 인수는 프로세스 풀 정의를 구별하는 속성을 사용할 수 있습니다. php-cgi.exe 프로세스를 사용하면 "-d"명령 행 스위치를 사용하여 PHP 프로세스에 대한 INI 항목을 정의 할 수 있습니다. 이 스위치를 사용하여 인수 문자열을 고유하게 만드는 PHP 설정을 지정할 수 있습니다.
예를 들어 자신의 PHP 설정 집합이 필요한 두 개의 웹 사이트 "website1"과 "website2"가있는 경우 FastCGI 프로세스 풀을 다음과 같이 정의 할 수 있습니다.
<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>
이 예에서 PHP의 open_basedir 설정 프로세스 풀 정의를 구별하기 위해 사용된다. 이 설정은 또한 각 프로세스 풀에 대한 PHP 실행 파일이 해당 웹 사이트의 루트 폴더 내에서만 파일 작업을 수행 할 수 있도록합니다.
그런 다음 website1은 다음과 같이 PHP 처리기 매핑을 가질 수 있습니다.
<system.webServer>
<handlers accessPolicy = "Read, Script">
<add name="PHP via FastCGI" Path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites/Website1" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
website2는 다음과 같이 PHP 처리기 매핑을 가질 수 있습니다 :
<system.webServer>
<handlers accessPolicy = "Read, Script">
<add name="PHP via FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website2" resoruceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
PHP.INI 위치 지정
PHP 프로세스가 시작되면 다양한 설정을 사용하여 php.ini 파일의 위치를 결정합니다. PHP의 설명서는 PHP시동 과정에 대한 상세한 설명을 제공한다. PHP 프로세스가 php.ini 위치를 검색하는 장소 중 하나는 PHPRC환경 변수입니다. PHP 프로세스가 이 환경 변수에 지정된 경로에서 php.ini 파일을 찾으면 이를 사용합니다. 그렇지 않으면 PHP 프로세스가 php.ini 파일의 기본 위치를 사용하도록 되돌아갑니다. 이 환경 변수를 사용하여 호스팅 고객이 자신의 버전의 php.ini 파일을 사용할 수 있습니다.
예를 들어 C:\WebSites\website1 및 C:\WebSites\website2 파일 경로에 있는 두 개의 웹 사이트 "website1"및 "website2"가있는 경우 다음 위치에서 php-cgi.exe 프로세스 풀을 구성 할 수 있습니다. applicationHost.config파일의 <fastcgi> 섹션은 다음과 같습니다.
<fastCgi>
<application fullPath="C:\PHP\php-cgi.exe" arguments="-d open_basedir=C:\Websites\Website1">
<environmentVariables>
<environmentVariable name="PHPRC" value="C:\WebSites\website1" />
</environmentVariables>
</ application>
<application fullPath="C:\PHP\php-cgi.exe" arguments="- d open_basedir=C:\WebSites\Website2">
<environmentVariables>
<environmentVariable name = "PHPRC" value="C:\WebSites\website2" />
</environmentVariables>
</application>
</fastCgi>
이 방법으로 website1은 C:\WebSites\website1에 있는 php.ini 파일의 자체 버전을 가질 수 있으며 website2는 C:\WebSites\website2에 있는 php.ini 파일의 자체 버전을 가질 수 있습니다. 이 설정은 또한 php.ini 파일이 PHPRC 환경 변수에 의해 지정된 위치에서 발견되지 않을 경우 PHP는 php-cgi.exe가 있는 동일한 폴더에 있는 기본 php.ini 파일을 사용합니다.
PHP 애플리케이션을 위한 URL 재작성 기능 제공
인기있는 PHP 응용 프로그램의 대부분은 웹 서버의 URL 재작성 기능을 사용하여 사용자 친화적이고 검색 엔진 친화적인 URL을 가능하게 합니다. IIS는 URL 다시 쓰기 모듈을 사용하여 URL 다시 쓰기 기능을 제공합니다.
URL 다시 쓰기 모듈을 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하십시오.
- Microsoft URL 다시 쓰기 모듈 연습 URL 다시 쓰기 모듈을 사용하는 방법에 대해 설명합니다.
- Microsoft URL 다시 쓰기 모듈 구성 참조 모듈의 기능을 설명하고 모든 구성 옵션에 대한 설명을 제공합니다.
- URL재작성 모듈과 함께 작동하도록 인기있는 PHP 응용 프로그램 구성 :
- WordPress
- MediaWiki
- b2Evolution
- Mambo
- Drupal
'서버 > 웹서버설정' 카테고리의 다른 글
윈도우 서버 2012 IIS의 Django 응용프로그램 실행 (1) | 2017.02.05 |
---|