IIS7 환경에서 텍스트큐브 사용하기

우선 IIS7 + FastCGI + PHP + MySQL 설치 문서대로 관련 프로그램 설치를 완료한다.

PHP는 5.2 이상, MySQL은 5.0 이상을 권장한다.

 

※ 텍스트큐브 1.7.7 이상 버전부터 IIS7 환경에서의 설치를 공식 지원한다.

설치 과정

  1. 먼저 이곳에서 IIS용 URL Rewrite 모듈을 받아 설치한다. IIS 관리자가 열려있다면 재시작해야 보인다. 예전의 CTP 버전은 한글 처리에 문제가 있었으나 필자가 MS 관계자에게 직접 보고하였고 최종 릴리즈에서는 해당 문제가 수정되었음을 확인하였다.
  2. 텍스트큐브 소스코드를 내려받아 wwwroot 안의 원하는 곳에 압축을 푼다. 여기서는 tcpath 디렉토리에 설치했다고 가정하겠다.
  3. 해당 폴더의 속성 -> 보안 탭에서 IIS_IUSRS 그룹과 IUSR 사용자에게 쓰기 등 모든 권한을 허가해준다. (간혹 IIS_IUSRS에만 권한을 추가하면 안 되는 경우가 있는데 이때 IUSR에게도 권한을 추가하면 된다.)
    step-security-04.png
    이것은 리눅스에서 설치할 때 디렉토리 퍼미션을 777로 설정하는 것(조금 더 정확히는 웹서버가 읽기·쓰기를 모두 할 수 있는 것)과 같은 효과를 낸다.
  4. http://127.0.0.1/tcpath/setup.php로 들어가 설치를 진행한다.
    localhost를 쓰면 세션 쿠기 생성이 안 되어 로그인할 수 없으므로 127.0.0.1이라는 로컬호스트 전용 IP 주소를 사용한다.

    • 참고 : Google Chrome에서는 127.0.0.1에서도 쿠키 생성이 안 되기 때문에 %SystemRoot%\System32\drivers\etc\hosts 파일을 직접 수정하여 가상의 도메인을 만들어주고 이를 사용한다.
  5. .htaccess 파일을 생성하지만 이 상태로는 IIS에서 인식하지 못한다. 4단계에서 다음을 클릭하면 다소 시간이 흐른 후 IIS 서버임을 인식하여 두 가지 버전의 전용 rewrite rule 생성 여부를 선택할 수 있다. 여기서는 IIS7을 선택한다.
    step-install-05.png
  6. 나머지 과정을 진행하고 http://127.0.0.1/tcpath/index.php를 열면 일단 환영 포스트와 함께 첫 화면이 보여야 한다. (아직 다른 부분은 동작하지 않을 것이다)
  7. URL Rewrite 모듈 설정을 열고 .htaccess 파일에 쓰여진 rewrite rule 전체를 [Import Rules...] 버튼을 눌러 나온 대화상자에 그대로 붙여넣고 [OK]를 누른다.
    step-install-10.png
  8. 이제 IIS에서도 fancy URL이 정상적으로 작동하는 텍스트큐브를 사용할 수 있다.

 

다음은 IIS7이 아닌 IIS6 이하 버전을 위한 Ionics ISAPI Rewrite Filter를 이용할 때의 7단계 설정 방법이니 참고한다.

  1. 이제 URL Rewrite 모듈 설정을 할 차례이다.

    1. IIS관리자에서, 사이트 -> Default Web Site를 클릭하고 [ISAPI 필터]를 연다.
    2. [추가...]를 눌러 다운로드받은 필터 DLL(IsapiRewrite4.dll)을 추가한다. 이 DLL 파일은 자신이 원하는 곳 아무데나 집어넣으면 된다.
    3. IsapiRewrite4.dll과 동일한 폴더에 IsapiRewrite4.ini 파일을 생성하고 .htaccess로부터 RewriteEngine OnRewrite Base 구문을 제외한 나머지 Rewrite 규칙들을 복사한다.
    4. 각 RewriteRule에서 정규표현식의 맨 첫글자(^) 바로 뒤에 /tcpath/를 추가한다. (앞뒤 슬래시 포함)
    5. 각 RewriteRule에서 치환된 결과식 맨 첫글자 앞에 /tcpath/를 추가한다. (앞뒤 슬래시 포함)
    6. 각 RewriteRule 중 플래그(대괄호로 알파벳 적힌 것)에 U를 추가한다. 예를 들어 [L,QSA]라고 되어 있으면 [L,QSA,U]라고 바꾼다. U 플래그는 이 ISAPI 필터에서만 지원하는 옵션으로 $_SERVER['HTTP_X_REWRITE_URL']에 rewrite 되기 전의 원본 URL을 보존해주는 역할을 한다.
      예제 : (첫번째 줄이 두번째 줄과 같이 바뀜)
      RewriteRule ^(.*)$ rewrite.php [L,QSA]
      RewriteRule ^/tcpath/(.*)$ /tcpath/
      rewrite.php [L,QSA,U]
  2. 관리자 권한으로 연 명령 프롬프트에서 net stop w3svc / net start w3svc를 연달아 입력하여 World Wide Web Publishing Service를 재시작한다. IIS 관리자에서 사이트가 시작되어 있지 않으면 시작해준다.
  3. 웹브라우저로 접근해서 로그인 화면이 뜨고 버전 체크 정보를 생성하겠냐는 대화상자가 나오면 다 된 것이다.
    이제 IIS에서도 텍스트큐브를 사용할 수 있다!!

 

참고 : 만약 돈이 충분하다면 HeliconTech 사에서 제작하는 rewrite 모듈을 이용해보는 것도 좋다. .htaccess를 통해 아파치와 완전히 똑같은 문법으로 rewrite가 작동하도록 지원하고 있기 때문에 별다른 설정 없이 리눅스에서 하듯 설치할 수 있을 것이다. (하지만 직접 테스트해보지 않았으므로 장담은 못함-_-)

현재 알려진 문제점

  • 글에 파일 첨부를 하였을 경우, 첨부 파일이 저장되는 디렉토리 자체는 모두 권한이 제대로 되어 있으나, 첨부 파일 자체가 IIS_IUSRS 그룹에 아무 권한이 없는 상태로 만들어진다. 따라서 첨부 파일 업로드는 성공적으로 되지만 첨부 파일을 보거나 삭제할 수 없는 문제가 발생한다.

    • 원인 : php 기본 설치 상태에서 php.ini의 upload_tmp_dir 설정이 C:\Windows\Temp로 잡혀 있는데, move_uploaded_file()을 수행하면 이 디렉토리의 권한을 그대로 옮겨오기 때문이다.
    • 해결 방법 : php.ini에서 upload_tmp_dir을 IIS_IUSRS가 모든 권한을 가지는 임의의 다른 디렉토리로 바꾼다. (예: C:\inetpub\temp\PHP Uploads라는 디렉토리를 하나 만들고 권한 주기)

Textcube 1.7.5 기준의 Rewrite Rule 설정

  1.  
  2. RewriteEngine On
    RewriteBase /tcpath/

    RewriteRule ^tcpath/(thumbnail)/([0-9]+/.+)$
    tcpath/cache/$1/$2 [L]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^
    tcpath/(cache)+/+(.+[^/]).(cache|xml|txt|log)$ - [NC,F,L]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^
    tcpath/(.+[^/])$ tcpath/$1/ [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^
    tcpath/(.*)$ tcpath/rewrite.php [L,QSA]
  1. 술이 2009.07.21 22:02 신고

    IIS에 텍스트큐브를 실질적으로 사용 운영하는 사람이 몇이나 있을까 궁금합니다. 몇달간 써본결과 결론은 절대 비추입니다.
    이유중 첫번째는 아파치에서 되던 기능들이 50프로 이상 사용할수가 없습니다. 지원만 할뿐 이에대한 트러블슈팅 문제는 몇달동안 해결되지 않았습니다. 버젼업 되면 될려나?
    둘째 설정상의 부재입니다. 덕분에 하나하나 설정하면서 공부는 정말 많이 하면서 많이 알고 뿌듯했지만 다른사람들은 이 고생을 하면서 사용할까요? 포맷이나 안하면 다행입니다.
    IIS에서 PHP완벽지원 성능향상 이런말들고 필자를 아주 유혹했습니다만 정작 남겨진건 홀로 외로이 열심히 찾아내면서 독학한 삽질뿐이였습니다.
    APM 윈도우용이 있는데 차라리 이거 깔고 시작하라고 하고 싶습니다. 텍스트큐브는 아직까지 IIS에서 완벽지원이 아니고 일부 호환이라는 제목을 달아야 한다는 저의 생각입니다.

    • duraboys 2009.07.22 17:50 신고

      좋은 정보 감사합니다.

      소양이 부족한 제 블로그는 제가 직접 포스팅을 하는 경우도있고
      또는 업무나 공부를 위해서 인터넷 여기저기 떠 돌아 다니는 글을
      많이 긁어 오는 부분이 있습니다.

      인터넷에 돌다 다니는 글이다보니 출처가 분명하지 못한점들도있고
      저 또한 출처는 남겨둘려구 하나 그러지 못하는 점들도 있습니다.

      핑계 거리겠지만 아직 정확하게 저역시 APM이 아닌 WPM으로
      확실하게 판단 또는 테스트를 진행을 해본적이 없고 많이 부족합니다.

      좋은 정보와 지적에 감사 드립니다.
      좀더 정확하고 좋은 정보를 담도록 하겠습니다.

+ Recent posts