제2의 비엔지니어 인생관을 꿈꾸며

Posted
Filed under Study
사용자 삽입 이미지
MS를 찬양하던 필자가 결국 PHP사이트를 IIS7에서 운영하겠다는 생각을 접어버렸다. IIS는 닷넷이나 운영하라 이거야~! 텍스트 큐브든 제로보드4 구버젼이든 이걸 해결해줄 개발자나 서포터도 없었다. 윈도우 아파치에서도 잘되는 PHP사이트지만 IIS7에서는 한번 제대로 물을 먹어야만 했다. 몇달간 운영하면서 위 그림처럼 좋은 기능이 마비 된상태였다.MS는 도대체 뭐가 그리 완벽 호환이라고 하던가. 씨발~~~ 이라는 욕을 수도 없이 많이 참았건만 이건 아니지 않나? 앞으로 MS는 정말 제대로 지원하는가를 확실히 알고 홍보에 나서기 바란다. 내 Hyper-V 제대로 되는 서버에 리눅스 제대로 깔아서 PHP사이트는 전부 리눅스에 올인하기로 했다. 리눅스 제대로 관리 못할거면 DB와 소스 백업스케쥴에라도 의존하자 ㅎㅎ.
리눅스 관리 부재를 선언했던 필자가 다시 리눅스에 눈돌리기 시작하고 있다. 너무 윈도우 서버 의존도가 높아서 편한 서버관리를 어렵게 진행하지 않았나 하는 생각을 해보며 SULinux2.0 이 나온 기념으로 다시 가상화에 올릴 준비를 하고 있다.
2009/08/07 00:20 2009/08/07 00:20
Posted
Filed under Study
몇 가지 고려사항이 있습니다.

첫째, PHP 웹사이트의 보안을 위해 다른 사이트와 격리 시켜야 합니다.
 . 웹사이트 마다 어플리케이션 풀을 각자 할당
 . 어플리케이션 풀 아이덴티티에 사용자 계정 사용
 . 어플리케이션 풀 아이덴티티를 사용하기 위해 Anonymous 사용자 설정
 . FastCGI의 impersonation 설정 확인 (fastcgi.impersonate = 1)

둘째, PHP 프로세스를 재활용 하세요
 . 네이티브 PHP 리사이클링이 시작되기 전에, php-cgi.exe가 항상 리사이클 되도록 하는 것이 좋습니다.
   FastCGI의 프로세스 리사이클링은 instanceMaxRequests라는 파라미터에 의해 결정됩니다.
   리사이클 되기 전에 몇개의 FastCGI 프로세스를 처리할 것인지를 설정하는 역할을 하죠. 이 파라미터 이외에도
   PHP 자체적으로 프로세스 리사이클링을 담당하는 파라미터가 있는데, PHP_FCGI_MAX_REQUESTS가 바로
   그거죠. instanceMaxRequest 값을 PHP_FCGI_MAX_REQUESTS 값보다 작거나 같게 하면 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 set config -section:system.webServer/fastCgi /+[fullPath='c:\{php_folder}\php-cgi.exe'].environmentVariables.[name=’PHP_FCGI_MAX_REQUESTS’, value='10000']

※ 미리 값을 설정하지 않으면 기본 설정값은 instanceMaxRequest=200, PHP_FCGI_MAX_REQUESTS=500 으로 할당됩니다.

셋째, PHP의 버전
 . PHP 어플리케이션은 주로 특정 버전의 PHP의 기능 및 특징을 이용하여 개발되죠. 웹호스팅 환경에서, 또는 기업에서 사용하는 PHP 어플리케이션이 다양한 버전의 PHP를 사용한다면, 한대의 서버에서 여러개의 PHP를 지원하는 것은 필수겠지요. IIS7의 FastCGI 핸들러는 여러 버전의 PHP를 지원합니다. PHP4.4.8, PHP5.2.1, PHP5.2.5 non thread-safe 버전이 모두 필요하다면 PHP컴파일러를 파일 시스템에 각각 다운 받아야 합니다. (c:\php4.4.8, c:\php5.2.1, c:\php525nts)를 설치한 후 각 버전의 어플리케이션 풀을 생성합니다.

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']

site1, site2, site3의 3개의 웹사이트가 있고 각 사이트가 별도의 버전 PHP를 사용한다면 아래와 같이 설정할 수 있을 겁니다.

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 보안강화를 위한 추천 항목
  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

출처:까만돌의 IT,아키텍트 이야기

난첫번째거 하나도 실행안했는뎅... 위에서 하라는데로 해야 문제가 없을건데 만약 문제가 발생하면 위에 제시한데로 해봐야지.

2009/01/03 21:59 2009/01/03 21:59