Ticket #1085 (assigned task)

Opened 3 months ago

Last modified 4 weeks ago

IIS 환경 지원하기

Reported by: daybreaker Owned by: daybreaker
Priority: major Milestone: 2.0
Component: Setup Version: 2.0
Keywords: setup iis iis7 fastcgi Cc:
Release:

Description

IIS7 + FastCGI 환경에 대한 대응을 추가합니다.

IIS에서 사용할 수 있는 rewrite 모듈도 있는데 관련하여 테스트해보겠습니다. (다른 것보다 설치 과정이 문제일 듯...-_-)

Change History

  Changed 3 months ago by daybreaker

[6623]

refs #1085: IIS7+FCGI 환경에서는 $_SERVERSERVER_SIGNATURE? 변수가 정의되지 않습니다.

  Changed 3 months ago by daybreaker

관련하여 매뉴얼을 함께 작성하고 있습니다. 다음을 참고하세요 : http://daybreaker.springnote.com/pages/1723022

  Changed 3 months ago by daybreaker

삽질 중 알아낸 사실 하나 : IIS7 이후부터 IIS 개발팀이 직접 제공하는 Rewrite 모듈을 이용할 경우, Rewrite 되기 전의 URL은 $_SERVER['HTTP_X_ORIGINAL_URL']에 저장됩니다. -_-;

  Changed 3 months ago by daybreaker

[6624]

refs #1085: IIS7용 rewrite 모듈 대응 추가

follow-up: ↓ 6   Changed 3 months ago by daybreaker

r6623, r6624와 함께 약간(?)의 삽질로 IIS7에서 아주 잘 작동하는 것을 확인했습니다. 위에 링크한 매뉴얼 문서 참고해주세요~

in reply to: ↑ 5   Changed 3 months ago by inureyes

Replying to daybreaker:

r6623, r6624와 함께 약간(?)의 삽질로 IIS7에서 아주 잘 작동하는 것을 확인했습니다. 위에 링크한 매뉴얼 문서 참고해주세요~

흐흐 /doc/ 하위에 문서 하나만 추가해주세요~

  Changed 3 months ago by daybreaker

넵.

현재 다른 것은 거의 문제 없이 작동함을 확인했는데요(외부에서 트랙백이나 댓글알리미 보내는 것은 제 ISP 회선에서 HTTP inbound 트래픽을 차단하고 있는 관계로 포트 바꿔도 안 돼서 테스트 불가능-_-), 알려진 문제점 항목에 적은 것처럼, 파일 업로드 시 업로드 자체는 잘 되지만 업로드된 파일의 권한에 IIS_IUSRS 그룹이 읽을 수조차 없게 되어 있어 별도 처리가 필요할 듯합니다. 해당 부분 처리되면 문서로 추가하겠습니다.

  Changed 3 months ago by daybreaker

권한 문제의 원인을 발견하였습니다. PHP를 윈도우에 기본 설정으로 설치하였을 경우, C:\Windows\Temp가 업로드된 파일을 담는 temp directory가 되는데 이 디렉토리의 퍼미션이 IIS_IUSRS는 읽을 수 없도록 설정되어 있습니다. 여기서 파일을 옮기니까(move_uploaded_file() 함수) 그 퍼미션이 그대로 따라가기 때문인 것 같습니다.

해결 방법은 IIS_IUSRS가 모든 권한을 가진 디렉토리를 하나 만들고 php.ini에서 temp_dir 설정을 바꾸는 것밖에 없고 텍스트큐브 소스코드에서 특별히 할 일은 없는 것 같네요.

테스트해보고 문서 추가하겠습니다.

  Changed 3 months ago by daybreaker

[6625]

refs #1085: IIS7 설치 방법 매뉴얼 추가

  Changed 3 months ago by inureyes

[6626]

refs #1085

  • credit 업데이트

  Changed 3 months ago by inureyes

[6630]

refs #1085

  • 1.7 트리에 해당 변경 사항 추가
  • 관련 문서 업데이트

  Changed 3 months ago by inureyes

[6631]

refs #1085

  Changed 3 months ago by daybreaker

[6636]

refs #1085: [6630]에서 빠진 파일 추가

  Changed 3 months ago by daybreaker

다른 티켓 확인을 위해 테스트하던 중 IIS에서는 한글이 들어간 슬로건이 잘 동작하지 않는 문제를 발견하였습니다. (존재하지 않는 페이지라고 뜨거나 첫화면과 동일하게 나옴) Rewrite 모듈 문제인지 아니면 다른 문제인지 테스트해보겠습니다.

  Changed 3 months ago by daybreaker

  • status changed from new to assigned

  Changed 3 months ago by daybreaker

테스트 결과 IIS7로 한글 URL을 넘기면 강제로 euc-kr로 변환되는 것 같습니다. OTL......

  Changed 3 months ago by daybreaker

Rewrite module에서 ^testtest.php로 rewrite하도록 한 다음 아래와 같이 테스트하였습니다.

테스트 코드 :

<?php
header("Content-Type: text/html; charset=utf-8");
?>
<html>
<head>
	<title>IIS7 Rewrite Module Test</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
	<p><a href="/test/한글">Test Link (raw)</a></p>
	<p><a href="/test/<?php echo urlencode("한글");?>">Test Link (encoded)</a></p>
	<p><a href="/test/<?php echo urlencode(iconv('utf-8', 'cp949', "한글"));?>">Test Link (encoded with cp949)</a></p>
	<p>Received URL (encoded) : <?php echo urlencode($_SERVER['HTTP_X_ORIGINAL_URL']); ?></p>
	<p>Received URL (raw) : <?php echo $_SERVER['HTTP_X_ORIGINAL_URL']; ?></p>
	<p>Received URL (cp949 -&gt; utf8) : <?php echo @iconv('cp949', 'utf-8', $_SERVER['HTTP_X_ORIGINAL_URL']); ?></p>
	<p>Received URL (utf8 -&gt; cp949) : <?php echo @iconv('utf-8', 'cp949', $_SERVER['HTTP_X_ORIGINAL_URL']); ?></p>
</body>
</html>
<!-- vim: set fenc=utf8: -->

테스트 결과 (어떤 링크를 클릭하든 상관 없이) :

Test Link (raw)
Test Link (encoded with utf-8)
Test Link (encoded with cp949)
Received URL (encoded) : %2Ftest%2F%C7%D1%B1%DB
Received URL (raw) : /test/�ѱ�
Received URL (cp949 -> utf8) : /test/한글
Received URL (utf8 -> cp949) : /test/

IIS 설정으로 고칠 수 있는 방법을 알아본 후 여의치 않을 경우 텍스트큐브에서 서버 정보를 판단하여 자동 변환하는 방법을 사용해야 할 것 같습니다.

  Changed 3 months ago by daybreaker

일단 위에서 막혀서(...) IIS5.1을 가지고 Ionic ISAPI Rewrite Filter 1.2.15a 버전을 가지고 해봤는데 약간 차이점이 있더군요.

오히려 이쪽이 설정 파일 형식은 Apache mod_rewrite와 유사해서 좀더 편하긴 한데, 대신 rewrite flag에 모두 U를 추가해야 하고, 디코딩되어 제공되는 HTTP_X_ORIGINAL_URL 대신 디코딩되지 않은 채로 제공되는 HTTP_X_REWRITE_URL 서버 변수를 이용해야 합니다.

관련한 예외 처리 루틴을 따로 만들어야겠군요.;

  Changed 3 months ago by daybreaker

[6644]

refs #1085

  • IIS7용 Rewrite 모듈의 강제 인코딩 변환 대응
  • IIS5.1/6.0용 Ionics ISAPI Rewrite Filter 대응

  Changed 3 months ago by daybreaker

일단 IIS7의 강제 인코딩 변환에 관해 자료를 검색해보니 ISAPI는 ANSI API로만 제공되기 때문에 제대로 된 유니코드 처리가 불가능하다는 얘기가 있습니다. 어디선가 소리소문없이(...) 바뀌어버리는 듯합니다.. ㅠㅠ;

  Changed 3 months ago by daybreaker

http://trac.wordpress.org/browser/branches/2.6/wp-settings.php#L58

워드프레스조차 별다른 조치가 없군요....-_-;

초간단 ASP.NET 스크립트 하나 만들어서 해보니 이쪽은 또 무조건 utf-8로 변환되어 넘어오네요. orz

  Changed 3 months ago by daybreaker

http://www.binaryfortress.com/wordpress-url-rewrite/

................우리도 하나 만들까요... 이거 계속 뒤져보고 있는데 정말 안 나오네요 -_-;

  Changed 3 months ago by daybreaker

음, 결국 다른 Rewrite 모듈을 사용해보니 되는군요. IIS 개발팀에서 '공식' 릴리즈한 Rewrite 모듈 자체의 문제로 생각됩니다. OTL

http://www.codeplex.com/IIRF

이것을 사용하니 깔끔하게 잘 되네요. IIS 5.x/6.0과의 호환성도 있으니 그냥 이걸로 가는 걸로 하겠습니다. ㅠㅠ

  Changed 3 months ago by daybreaker

앗, 이번엔 또다른 문제를 발견했습니다.; QSA 플래그가 동작하지 않아서 로그인할 때 redirect하는 부분이나 페이징이 오동작합니다. 뒤져보니까 알아서 잘 룰 바꿔서 쓰셈...정도인 듯...ㅠ_ㅠ

  Changed 3 months ago by daybreaker

[6652]

refs #1085

  • setup.php가 IIS를 인식하고 이에 맞게 진행하도록 함
  • IIS7 전용 RewriteModule에 대한 한글 URL workaround 제거하고 공식적으로는 Isapi Rewrite Filter만 지원함.

  Changed 3 months ago by daybreaker

  • summary changed from IIS7 대응하기 to IIS 환경 지원하기

  Changed 3 months ago by daybreaker

[6653]

refs #1085: 오타 및 메시지 수정

  Changed 3 months ago by daybreaker

[6654]

refs #1085: 관련 문서 수정

  Changed 3 months ago by daybreaker

  • status changed from assigned to closed
  • resolution set to fixed

Apache에서 정상적으로 설치를 진행할 때 변경된 setup.php 코드가 영향주지 않는다는 것을 테스트 완료하였습니다. .htaccess를 똑같이 지원하는 상용 IIS 모듈들의 경우는 상용인 관계로(...) 실제 테스트는 못해보았습니다.

티켓 닫습니다.

  Changed 3 months ago by daybreaker

[6657]

refs #1085: setup.php 기존 버그(?) 수정

  Changed 3 months ago by daybreaker

음, 티켓은 일단 닫혔지만 새로운 문제점 발견-_-입니다.

PHP 5.2.6 최신 버전 기준으로, 64bit IIS 7.0에서 사용 시 아주아주 특이한 케이스(텍스트큐브의 경우 관리자 모드 개인 정보 설정에서 OpenID 추가하려는 경우)에 한해 FastCgiModule과 PHP가 함께 죽는 문제가 있습니다.

http://bugs.php.net/bug.php?id=45786 보면 한 달 전에 버그리포팅이 된 사항인데, 최신 스냅샷 빌드를 받으러 가보니(http://snaps.php.net/) PHP 5.2 Win32 바이너리 빌드만 한 달 넘도록 갱신이 안 되고 있네요. OTL (게다가 옆에 보면 /dev/urandom 참조하세요라고 ....-_-)

아무래도 5.2.7 이상 나올 때까지 기다려야 하려나 봅니다...ㅠㅠ 아니면 5.3 가든지.

  Changed 3 months ago by daybreaker

이게 IIS를 64bit 전용으로 설정하면 좋겠...는데(php가 32bit여도 FastCGI는 named pipe를 통해 통신하므로 상관 없음, 실제로 해보니 setup.php에서 재설정/삭제 과정에서 뻑나고 잘 안 되던 부분들이 매끄럽게 됨) 그러면 Rewrite 모듈이 32bit라서 rewrite 작동이 안 되는 문제가 있습니다. ㅠ_ㅠ

  Changed 3 months ago by daybreaker

[6658]

refs #1085: 64bit 환경에서의 주의사항 추가

  Changed 3 months ago by daybreaker

[6659]

refs #1085: PHP_SELF 서버 변수 끝에 / 붙어버림으로써 setup.php의 재설정/삭제 동작이 제대로 수행되지 않는 문제 고침

  Changed 3 months ago by daybreaker

64bit IIS 7.0에서 그나마 안정적으로 돌리는 방법은 Classic .NET AppPool을 사용하면서 32bit 호환성을 켜주는 것인 듯합니다. 그러니까 더이상 Worker process가 죽었다는 얘기는 안 나오는 듯하네요.... 하아;

  Changed 3 months ago by daybreaker

[6664]

refs #1085: 상용 IIS mod_rewrite 호환모듈 사용시 setup flow 오류 수정

  Changed 3 months ago by daybreaker

  • status changed from closed to reopened
  • resolution deleted

아직은 좀더 자잘한 버그 수정이 필요할 것 같습니다.

pre-alpha가 alapha로 버전이 바뀌고 나서 checkup이 안 되는 문제를 찾아냈는데 checkup.php에서 fopen(ROOT . '/cache/CHECKUP', 'w') 호출이 실패하고 있습니다. 분명히 파일은 IIS_IUSRS에 모든 권한이 허가되어 있는데 왜 그런지 모르겠군요..;;;

  Changed 3 months ago by inureyes

[6681]

refs #1085

  Changed 3 months ago by daybreaker

cache 디렉토리에 대한 write 실패에 대해 새로운 사실을 알아냈습니다. IIS_IUSRS 말고 IUSR라는 계정이 있는데 이 계정에도 모든 권한을 주어야 제대로 동작하는군요. OTL;

follow-up: ↓ 42   Changed 3 months ago by daybreaker

[6683]

refs #1092, #1085

  • MySQL에서 일정 크기 이상의 데이터가 입력될 경우 짤리지 않고 오류를 내도록 설정된 경우 OpenID 로그인 안 되는 문제 수정 (윈도우용 배포본에서는 기본 옵션인 것 같습니다 orz) 디버깅 도와주신 coolengineer님께 감사를...ㅠ_ㅠ
  • PHP 5.x 대에서 달라진 call-by-reference에 맞게 경고 안 나오도록 OpenID 라이브러리 수정

  Changed 3 months ago by daybreaker

[6685]

refs #1085

in reply to: ↑ 40   Changed 3 months ago by coolengineer

Replying to daybreaker:

[6683] refs #1092, #1085 * MySQL에서 일정 크기 이상의 데이터가 입력될 경우 짤리지 않고 오류를 내도록 설정된 경우 OpenID 로그인 안 되는 문제 수정 (윈도우용 배포본에서는 기본 옵션인 것 같습니다 orz) 디버깅 도와주신 coolengineer님께 감사를...ㅠ_ㅠ * PHP 5.x 대에서 달라진 call-by-reference에 맞게 경고 안 나오도록 OpenID 라이브러리 수정

For transactional tables, an error occurs for invalid or missing values in a statement
when either of the STRICT_ALL_TABLES or STRICT_TRANS_TABLES modes are enabled.
The statement is aborted and rolled back.

데이터가 잘못되었을때 바로 오류를 내는 형태로 동작하는 것을 기본동작으로 했다는군요.

  Changed 8 weeks ago by daybreaker

  • status changed from reopened to new

IIS7에서부터 제공되는 IIS 개발팀의 공식(?) URL Rewrite 모듈의 인코딩 버그와 관련하여 마이크로소프트 관계자(?)와 접촉하였습니다. 본사 개발팀에 영문 리포팅을 보냈고, 그쪽에서 해당 버그를 '잠재적으로' 수정한 private build를 보내주었는데 코드 서명이 안 되어 있는 관계로 다음번 정식 릴리즈 때 수정되어 나올 거라고 하니 테스트해본 후 설치 과정에 추가하도록 하겠습니다.

  Changed 4 weeks ago by daybreaker

  • status changed from new to assigned
Note: See TracTickets for help on using tickets.