본문 바로가기

Developer

Windows 2008 Server IIS 7.0에 PHP붙이기~

IIS 7.0으로 넘어오면서 PHP가 정말 잘 구동 되게 되었습니다..

 

그래서 오늘은 IIS 7.0에 PHP를 붙여 보도록 하겠습니다~

 

 

먼저 PHP를 구동하기 위해서는 먼저 웹 서버에 역활을 추가하셔야 합니다.

서버 관리자 –> 역할 –> 역할 추가 –> CGI

 

 

 

php를 최신 버전으로 다운 로드 한 후 설치 하겠습니다.

http://kr.php.net/get/php-5.2.9-1-Win32.zip/from/a/mirror

 

에서 최신 버전을 다운 받고  C:\php에 압축을 풉니다.

압축이 풀린 폴더에서 php.ini-recommended 파일을 php.ini로 이름을 변경합니다.

그리고 아래와 같이 내용을 수정합니다.

- fastcgi.impersonate = 1
- cgi.fix_pathinfo = 1
- cgi.force_redirect = 0
- open_basedir 설정 (웹 사이트 컨텐츠가 있는 폴더나 네트웍 경로)

 

그리고 IIS에서 php 사이트를 만들어 보겠습니다.
응용 프로그램 풀은 각각 구성하시는 것을 추천합니다.

 

 

 

그리고 PHP를 구동하기 위한 모듈을 매핑하여야 합니다.

 

 

처리기 매핑을 선택하신 후 모듈 매핑 추가를 선택합니다.

 





요청 경로 : *.php

모듈 : FastCgiModule

실행 파일 : php가 설치된 경로에 php-cgi.exe로 선택하시면 됩니다.

이름 : 원하는데로 하시면 됩니다~

 

이제 php 설정은 끝났습니다.

php 웹사이트 경로에 test.php 파일을 만드시고.

<?php phpinfo(); ?> 을 작성 하신 후 브라우져에서 확인하시면 됩니다.

 

 

위와 같이 뜨게 되면 정상입니다.

 

이로써 php 구성은 끝났습니다.

 

다음은 좀더 세밀한 설정을 해 보도록 하겠습니다.

 

FastCGI는 native PHP 리사이클링이 이루어지기 전에 php-cgi.exe 프로세스들을 리사이클링 시킵니다. 바로 이 리사이클링은 설정 프로퍼티(instanceMaxRequests)에 의해 조절됩니다.

 

이 값은 FastCGI가 리사이클링 되기 전에 몇 개의 요청을 처리할 것인지를 정하게 됩니다.

 

PHP에서도 설정할 수 있습니다. PHP_FCGI_MAX_REQUESTS라는 것으로 설정하게 됩니다.

 

만약 instanceMaxRequests의 값을 PHP_FCGI_MAX_REQUESTS의 값보다 같거나 작게 설정하면 PHP의 리사이클은 절대 실행 되지 않습니다.

 

파라미터 값이 설정되지 않으면 디폴트 값을 사용하게 됩니다.

  • instanceMaxRequests: 200
  • PHP_FCGI_MAX_REQUESTS: 500


파라미터 값을 설정하려면 아래와 같은 명령문을 사용하시면 됩니다.


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


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

 

위 내용은 아래 IIS Manager admin Pack을 설치 하시면 더 쉽게 설정 할 수 있습니다.

 

http://www.iis.net/downloads/default.aspx?tabid=34&i=1682&g=6

 

 

다운 받아서 설치 합니다.

기본 설치로 설치하시면 되며, 인터넷 정보 서비스 관리자를 다시 껏다가 키게 되면 설정가능 합니다.

 

IIS에서 홈을 선택하시면 FastCGI Settings 라는 메뉴가 나타납니다.

 

 

더블 클릭 하여 선택 한 후 C:\php\php-cgi.exe를 선택하고 Edit를 누릅니다.

 

InstanceMaxRequests 를 200에서 10000으로 변경합니다.

  

 

EnvironmentVaribles 에 컬렉션을 선택하여 엽니다.

그리고 추가

Name : PHP_FCGI_MAX_REQUESTS

Value : 10000

으로 설정합니다.

 

이렇게 하시면 위와 동일한 설정이 되게 됩니다.

 

그리고 REQUEST_URI 서버 변수에 종속된 PHP 응용 프로그램이 IIS(Internet Information Services) 7.0에서 실패하는 문제를 해결하기 위하여 아래 업데이트를 설치 합니다.

 

http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=d0343911-1775-4aef-8c99-5f13862ac386

 

 

그리고 권고 사항입니다.

 

PHP 웹사이트의 보안을 위해 다른 사이트와 격리 시켜야 합니다.

. 웹사이트 마다 어플리케이션 풀을 각자 할당
. 어플리케이션 풀 아이덴티티에 사용자 계정 사용
. 어플리케이션 풀 아이덴티티를 사용하기 위해 Anonymous 사용자 설정
. FastCGI의 impersonation 설정 확인 (fastcgi.impersonate = 1)

 

PHP 보안강화를 위한 추천 항목

  1. Disable remote URL's for file handling functions:
    • Set allow_url_fopen=Off
    • Set allow_url_include=Off
  2. Disable register_globals:
    • register_globals=Off
  3. Restrict where PHP can read and write on a file system, e.g.:
    • open_basedir="c:\inetpub\"
  4. Disable safe mode:
    • safe_mode=Off
    • safe_mode_gid=Off
  5. Limit script execution time:
    • max_execution_time=30
    • max_input_time=60
  6. Limit memory usage and file sizes:
    • memory_limit=16M
    • upload_max_filesize=2M
    • post_max_size=8M
    • max_input_nesting_levels=64
  7. Configure error messages and logging:
    • display_errors=Off
    • log_errors=On
    • error_log="C:\path\of\your\choice"
  8. Hide presence of PHP:
    • expose_php=Off

 

서로 다른 버젼의 PHP를 IIS7에서 구성하는 방법 - PHP4와 PHP5를 하나의 웹서버에서 구성하는 방법.

http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/#BestPractices

 

여러 웹사이트별 PHP 구성

http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/#Per-site_PHP_configuration

 

URL Rewrite

http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1691


FastCgi on Server Core
설정방법은 아래 경로를 참조 하여 주십시오.

http://nimsgern.pe.kr/blogs/nims/archive/2008/03/23/fastcgi-on-server-core.aspx

등이 있습니다..

 

이상 php를 windows 20008 Server 혹은 Vista에서 설정하는 방법이었습니다.

감사합니다~