뭘 이런걸..

Posted
Filed under Tech/안녕리눅스
잠시 한눈파는 사이에, 한달전에 proftpd 1.3.1이 릴리즈 되었습니다. 그래서 부랴부랴 Korean User Group 버전을 열심히 릴리즈 했습니다. (http://proftpd.oops.org)

이번 버전에서는 내부 API 가 변경된 부분이 있어, 기존의 패치들을 맞춰주느라 좀 귀찮았습니다. T.T

안녕 리눅스 1.3.0a 패키지에 포함되었던 sendfile API 사용시에 scoreboard 에 파일 전송량과 파일 전송률이 나오지 않던 부분을 수정을 했었는데, 이번 버전에서 이 기능을 좀더 향상을 시켜 보았습니다. 이전 버전에서 sendfile 로 넘기는 count 를 10Mbyte 로 고정을 해서, 회선이 빠르고 파일이 클 경우에는 출력을 잘 했지만, 회선이 느리거나 파일이 작을 경우에는 여전히 제대로 나오지를 않았었는데, 이번 버전에서는 제일 처음 sendfile 로 넘기는 값을 지시자로 만들고, 이 넘긴 값을 측정하여 클라이언트의 회선 속도를 보정하여 sendfile 로 넘기는 값을 유동적이게 변경을 했습니다. 이제 회선 속도나 파일 크기에 별로 구애받지 않고 출력이 잘 되는 듯 싶습니다.

1.3.1kr 의 릴리즈 노트는 다음과 같습니다.

- added 1.3.1 official fix bug2988: mod_wrap2_file ignores "ALL" keyword bug2989: Unable to authenticate users if RadiusUserInfo is not con... bug2990: TLSCryptoDevice does not work bug2992: The %f LogFormat variable expanded improperly to "-" for ... bug2993: Unable to compile 1.3.1 on Debian unstable/amd64 bug2995: The %f LogFormat variable expanded to same file for RNFR ... bug2996: Requirement for same OpenSSL header, library version in m... - Deprecate DisplayFirstChdir. Replace to DisplayChdir on proftpd.conf - add SendfileSize directive see also http://proftpd.oops.org/reference.php?mode=detail&key=SendfileSize
2007/11/14 04:30 2007/11/14 04:30
Posted
Filed under Tech/프로그래밍
이전에 포스팅한 CVS Web Interface 를 드디어 공개합니다. 아마 초기 버전이라 버그가 숭숭 나올것 같기는 한데.. 그래도 :-) 다음은.. OOPS-CVSd 의 README 파일의 일부입니다.

$Id: README,v 1.2 2007/11/07 07:50:04 oops Exp $ OOPS-CVSd Copyright @ 김정균 All right reserved sinse 1997 OOPS CVSd는 CVS 저장소의 웹 인터페이스이며, 웹에서 CVS 저장소의 상황을 손쉽게 확 인 할 수 있습니다. 이 프로그램은 FreeBSD 프로젝트 중의 하나이자 Web CVS 프로그램 중에서 가장 대표적인 cvsweb (http://www.freebsd.org/projects/cvsweb.html)의 기능 을 충실하게 지원하고자 했으며, cvsweb이 지원하지 못하는 아쉬운 기능들을 추가하고 한국어 환경에 최적화를 한 프로그램입니다. 1. 지원 세부 사항 1. CVS server 1.1 / 1.2 2. Repository 2-1. Remote Repository 1. rlist ( 1.2.8 부터 지원됩니다. 안녕 리눅스의 cvs 1.11 에서도 가능) 2. rlog 2-2. Local Repository 1. co, rlog, rcsdiff, cvs 명령이 필요 (rcs package 와 cvs package 가 설 치되어 있어야 합니다. Remote Repository를 사용시 rlog보다 rlist가 성능이 더 좋으나 cvs 저장소에서 의 지원 여부 문제 때문에 rlist를 지원하지 않는 저장소에는 rlog를 사용하십시 오. 3. 속도 개선 대부분의 CVS 웹인터페이스들이 정렬을 위하여 데이터를 배열로 생성화는 과정에 서 속도가 저하되는 문제가 있습니다. 이 증상들은 revision 수가 많아질수록 더 욱 심해지게 되는데 CVSd에서는 이런증상을 최소화 하기 위하여 line by line 파 싱을 하여 속도의 개선을 상당히 높였습니다. 4. 언어셋 문제 CVSd는 저장소에 저장되어 있는 소스의 언어셋과 CVSd의 언어셋을 적절하게 설정 을 할 수 있도록 설계가 되어 있습니다. 가령 예를 들어 CVSd의 언어셋은 EUC-KR 인데 (UTF8이 아닌 이유는 제가 아직 EUC-KR을 사용하기 때문입니다. ^^) 저장소 소스의 문서가 UTF-8일 경우, 이를 깨지지 않도록 내부적으로 변환을 할 수가 있 습니다. 이를 위해서는 php-iconv extension이 지원이 되어야 합니다. 또한 UTF8 사용시 commit을 할 때, cvs log 가 UTF8과 EUC-KR이 혼재가 되는 경우가 많습니 다. 이는 의도하지 않은 환경상의 차이일 수 있는데, 이 경우, 한글에 대해서는 CVSd가 직접 체크를 해서 보정을 할 수 있습니다. (아마 EUC-JP까지는 같이 사용 을 할 수 있을거라 예상합니다만.. 확인은 못해 보았습니다.) 5. 웹브라우저 Free CVSd는 XHTML 1.0과 CSS 2.0의 W3C표준을 지원하며 자바 스크립트 사용을 자제하 여 어떤 브라우저라도 기본 기능을 이용할 수 있도록 되어 있습니다. (몇몇 에러 처리시에 자바 스크립트 alert이 이용되기는 합니다만, 기본 기능 사용에는 문제 가 없습니다.) 또한 skin을 지원하며 저장소 별로 스킨을 다르게 설정할 수 있습 니다. 6. 다중 언어 지원 GNU Gettext를 이용하여 다중 언어를 지원합니다. php gettext extension이 없을 경우에는 pure php code를 이용하여 PO파일을 파싱하여 지원을 하기는 하지만 성 능상 gettext extension을 사용하는 것이 좋습니다. 2. 사용 환경 1. 필요 패키지 웹서버 php >= 5.0 php iconv extension php gettext extension rcs package (co, rlog, rcsdiff command) cvs package
2007/11/07 20:20 2007/11/07 20:20
Posted
Filed under Tech/프로그래밍
요즘은 대세가 Subversion 인가요? 하지만 구관이 명관이라는 말처럼 제게는 Subversion 이 그리 와닿지가 않습니다. 일단 설치하고 셋팅하는 것이 너무 빡세고 새로운 것을 받아들여야 하는 것이 예전처럼 그리 와닿지가 않는군요. :-)

뭐 하여튼.. 그래서 전 CVS 를 사용하고 있다고 말을 하고 있습니다. CVS를 사용하다 보면 CVS Web UI 자주 사용하게 됩니다. 로그나 diff 같은 것을 보기가 상당히 편하게 되어 있으니까요. (Subversion 에서도 사용할 수 있는 Web UI가 있죠. 어쩌면 이런 부분에서는 Subversion 이 더 잘 되어 있습니다.) 그런데, 이 CVS Web UI의 속도가 느리고, local repository 밖에 다룰수 없다는 것이 상당히 불만이었습니다. 그래서 그냥 내가 만들어 버려.. 하고 생각한지 2년만에 틈틈히 손을 대기 시작했고, 드디어 어느정도의 성과물이 나왔습니다.

일단 새로 개발한 것의 특징은 원격 repository 를 지원하기 위하여, local rcs tool 을 이용한 것이 아니라 CVS protocol 을 hacking 하여 구현했다는 점입니다. 즉, anonymous 나 cvs account 권한이 있으면 서로 다른 repository 를 이 Web UI 에서 함께 관리할 수 있다는 점이 가장 큰 차이입니다. 이 기능은 CVS 1.2 의 rls 를 이용하거나 rls를 지원하지 않는 경우에는 따로 cvsdserver 라는 directory listing 을 해 주는 inet daemon 을 이용하여 처리를 하도록 되어 있습니다.

두번째로는, 속도의 향상에 있습니다. 기존의 Web UI 들이 모두 파싱을 하여 배열로 만들어서 이 배열을 정렬하든지 등등으로 관리를 하는데, 제가 만든 것은 네트워크 전송이 들어오는 족족 처리를 하도록 하여 속도의 향상을 시켰습니다. 다만, 이 부분 때문에 일부 자각하기는 힘든 기능들을 포기할 수 밖에 없었습니다. 일단 기본적인 기능은 FreeBSD 에서 배포하는 CVS Web을 기준으로 하였습니다.

현재까지..

사용을 하는데는 무리가 없을 정도.. 즉 세상에 꺼낼 정도는 만들어 졌습니다만.. 몇가지 처리사항을 더 하여 내 놓으려고 합니다. 일단, local repository 에 대하여 CVS protocol 을 탈 필요가 없기 때문에, 이를 처리하는 루틴이 들어가야 할 것입니다. 조만간.. 만날 수 있지 않을까 싶습니다. 다만.. 가장 큰 작업은 이를 어떻게 문서화를 하느냐가 아닐까 싶군요 ^^;
2007/10/30 22:39 2007/10/30 22:39
Posted
Filed under Tech/Tip & Trick
Redhat 8 이후부터 route 명령을 실행해 보면 다음과 같이 이상한 routing path 를 발견할 수 있습니다.

[root@db ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 211.115.85.0 * 255.255.255.224 U 0 0 0 eth0 172.16.0.0 * 255.255.0.0 U 0 0 0 eth1 169.254.0.0 * 255.255.0.0 U 0 0 0 eth1 default gw.kldp.org 0.0.0.0 UG 0 0 0 eth0


"어라.. 169.254.0.0는 내가 설정한 적이 없는데 어디서 튀어 나온거야?" 와 같은 의문을 가진 적이 없으신지요?

169.254.0.0/16은 Zero Configuration Networking 을 위하여 예약된 subnet 입니다. Zero Configuration Networking 이라는 것은.. DHCP 환경이 없는 네트워크에서 Peer to Peer 연결이나 Wireless 환경에서 관리자의 수동적인 설정이 없이 네트워킹을 할 수 있는 환경을 만들기 위한 규약입니다. (영어로 되어 있어서 대충 봐서 정확하지는 않습니다. 궁금하신 분들은 http://www.zeroconf.org/ 를 참고 하시기 바랍니다. 영어입니다!)

일반적인 IDC 환경에서는 별 의미가 없을 수 있지요. 그렇다면 이런글을 적는 이유는 무엇일까요? 바로 이 설정이 필요도 없고 보기도 싫으신 분들이 있을 것입니다. 부팅시나 네트워킹을 재시작 하여 이 정보가 올라오지 않게 하려면 /etc/sysconfig/network에 다음의 라인을 넣어주면 네트워킹이 재시작 된 이후부터는 나오지 않게 됩니다.

[root@db ~]# cat /etc/sysconfig/network NETWORKING=YES HOSTNAME=db.kldp.org NOZEROCONF=yes
2007/10/22 23:47 2007/10/22 23:47
Posted
Filed under Tech/프로그래밍
얼마전 어느분이 제게 CVS 에 rls 가 지원되도록 요청을 해 주셨습니다. CVS 1.2 로 업데이트를 하면 간단하게 해결이 되지만, CVS 1.2 가 아직 stable 이 아닌 관계로 별로 업데이트를 하고 싶지 않더군요. 그래서 1.12.13 의 rls 기능을 CVS 1.11 에 백포팅을 해 보았습니다.

strftime 관련하여서 m4 파일의 수정 문제가 귀찮아서 그냥 오리지날 strftime 을 사용하도록 변경한 것 외에는 거의 동일할 것 같습니다.

패치 파일을 첨부하니 관심 있으신 분들은 사용해 보시기 바랍니다. 이 패치파일은 RHEL 5 의 cvs 1.11.22-5 에 패치를 한 것이니 다른 버전에서는 참고하여 수정을 하시면 될 듯 싶습니다.

2007/10/21 05:09 2007/10/21 05:09
Posted
Filed under Tech/프로그래밍
얼마전 제 홈페이지의 QnA 게시판에 lighttpd 에서 mod_url 을 사용할 수 없냐는 문의가 들어와서 작성해 보았습니다. 물론 IE7 대응되게 작성이 되어졌으며, redirect 를 사용하지 않고 새로 만들어진 apache mod_url 처럼 내부에서 직접 physical.path 를 수정하도록 변경을 했습니다.

Apache mod_url 의 공식 개발자가 된 기념으로 lighttpd 용 mod_url 역시 apache mod_url site 인 http://modurl.kldp.net 에서 관리하도록 하겠습니다. 이 사이트에서 받으실 수 있으며, 문서를 참고 하실 수 있습니다. 물론 문의/버그등도 이 사이트를 이용해 주시면 되겠습니다.
2007/10/19 03:17 2007/10/19 03:17
Posted
Filed under Tech/프로그래밍
얼마전 W3C 의 HTML validator 가 0.8.1 로 업데이트 되었습니다. 기존의 0.7 대와는 많은 것이 달라졌습니다. 그래서 KLDP 의 open service 중의 하나인 http://validator.kldp.org 도 0.8.1 로 업데이트 하기 위해 준비중이었는데..

결정적으로 0.7 대까지 되던 localization 이 0.8 에서는 안되는 문제가 있더군요. 빡세게 번역을 했는데, 한글 출력이 되지 않는 안습의 상황이 발생하고 있습니다.

고쳐볼까 하고 코드를 살짝 둘러봤는데, 쉬운 문제가 아닌 것 같은 느낌이 들어 일단 포기하고 W3C 버그리스트를 살펴보니 0.9 milestone 에서 처리하려는 듯한 글만 찾을 수 있었습니다.

이걸 업데이트 해야 하는지 말아야 하는지 갈등이군요. 현재 영문으로 출력되는 것은 http://opens.kldp.org 에서 확인을 할 수는 있습니다. (아직 전체적인 정상 작동 여부는 확인을 안했습니다만..)
2007/10/01 15:37 2007/10/01 15:37
김정균

한글 출력 문제를 드디어 해결을 했습니다. :-) css-validator 와 비슷한 문제이더군요. cgi-bin/check 를 다음과 같이 수정함으로 해결이 가능 합니다.

@@ -972,7 +972,7 @@ $template->param(file_source => &source(
# $T->param(file_outline => &outline($File)) if $T->param('opt_show_outline');

# transcode output from perl's internal to utf-8 and output
-print Encode::encode('UTF-8', $template->output);
+print Encode::encode('ISO-8859-1', $template->output);

#
# Get rid of $File object and exit.

Posted
Filed under Tech/프로그래밍
검색을 하다보니 rrdtool 1.3 beta 가 나왔더군요. rrdtool 의 frontend 이 rrdexec 는 여전히 rrdtool 1.2 에서 사용을 할 수가 없고, rrdtool php extension 역시 아무도 1.2 용으로 개발을 하지 않더군요. 그래서 간만에 rrdtool 1.2 를 지원하도록 두 프로그램을 업데이트 해 보았습니다.

rrdtool php extension 의 경우에는 ob stream 을 지원하기 위하여, embeded library 를 만들어야 하는데, 기존에 1.0 에서 어느정도 수정을 했는지를 까먹은지라 1.2 용 embeded library 를 제작하는데 고생좀 했습니다. T.T

뭐, 덕분에 이제 php 용 rrdtool extension 이 드디어 하나 출현하게 되었습니다. (아니면 제가 찾지를 못해서 삽질을 한 것일 수도.. --;)

더불어, rrdexec 도 rrdtool 1.2 하에서 빌드가 될 수 있도록 수정을 했습니다. 하지만, 아직 rrdtool 1.2 의 개선된 기능을 사용할 정도로 업데이트가 되지는 못했습니다. 그냥 rrdtool 1.0 에서 제공하는 기능 정도만 현재 사용이 가능하며, rrdtool 1.2 로 빌드만 가능할 뿐입니다. (multibyte font 라든지, 개선된 graph 옵션을 아직 지원하지 못합니다.)

일단, 초석으로 rrdtool 1.2 에서 빌드가 가능하게만 해 놓은 상태이며, rrdexec 는 rrdtool 1.2 의 개선 사항을 반영하여 정식으로 릴리즈 할 계획 입니다.

현재 mod_rrd 와 rrdexec 의 개선 사항은 CVS 에만 반영이 되어 있습니다.

http://cvs.oops.org/index.cgi/rrdexec/
http://cvs.oops.org/index.cgi/mod_rrd/?cvsroot=OOPS-PHP
2007/08/06 21:54 2007/08/06 21:54
Posted
Filed under Tech/프로그래밍
며칠전에 IE7 과 mod_url 문제 수정 이라는 글에서 IE7 에서 한글 URI 를 사용할 경우 mod_url 과의 충돌로 무한 루프가 발생하는 문제를 수정하여 포스팅을 했었습니다.

그 과정에서, 301 로 재접속을 시킬때, IE7 의 재변환을 막기 위하여 url encoding 을 하여 문제를 해결했는데, 그 해결을 위해 사용했던 코드가 php raw_url_encode 함수를 수정하여 처리를 했습니다. 그런데, PHP license 와 Apache license 가 충돌이 나는 이유로 어떻게 할까 고심을 하다가 완전히 새로 작성을 하게 되었습니다.

apache 는 URL 에 대하여 다음의 구조체를 가집니다.


struct request_rec {
..
char *filename;
char *path_info;
char *uri;
struct stat finfo;
char *unparsed_uri;
uri_components parsed_uri;
..
}



위에 나열된 변수들이 URL 과 관련되었으며, filename 은 system 상의 경로를 가지고 있습니다. 그래서 이것을 이용하여

  1. uri 를 iconv 로 convert 를 함
  2. uri convert 가 실패하면, 그냥 file not found 로 전송
  3. filename 을 convert 함.
  4. filename convert 를 실패하면 301 로 변환된 URI 를 이용한 주소로 재접속 하도록 함.
  5. convert 된 filename 이 시스템상이 있는지 확인
  6. 있으면 정상 출력 없으면 file not found

와 같이 처리되도록 변경이 되었습니다. 딱 1가지 경우만 빼고는 재접속을 하지 않게 되는 변경이 된것입니다. 다만, 4번 과정에서 재접속을 해야 하는데, 이 경우는 다음과 같습니다.

서버에서 다음과 같이 Alias 가 결려 있을 경우입니다.


Alias /xxx/한글/ /home/httpd/html/한글/

이 설정과 같이, Alias 이름에 한글이 들어가 있으면 apache 구조체의 filename 변수에 실제 경로 부분에는 EUC-KR 이 그리고 URI 에 해당 되는 부분에는 UTF-8 이 들어가기 때문에 iconv 에서 실패를 하게 됩니다. Alias 가 해석되는 과정에서 이게 섞이게 되는데, 이 경우는 재전송을 통하여 EUC-KR 로 들어오게 하는 방법외에는 없더군요 --;

뭐 하여튼, 이런 구조로 완전히 재설계가 되었습니다. :-)

문제는, 이 수정 사항을 KLDP.NET 의 공식 mod_url 에 반영을 해야 하는데, 패치 주고받고 하면서 하기가 상당히 귀찮네요. 코드도 완전히 바뀌었고, 그냥 mod_url2 로 fork 를 할까도 살짝 고민중입니다. ^^;

어쨌든.. apache1/2 용 모듈 2개 모두 현재 재작성이 되었고, apaceh2 용 모듈은 실제 테스트는 아직 해 보지 못했습니다. 다만 apache 2.2 의 소스를 참고하여 API 는 맞추어 놓았습니다.

재작성된 mod_url 은 http://cvs.oops.org/index.cgi/mod_url/?cvsroot=OOPS-Apache 에서 apache 1 용은 1.17, apache 2 용은 1.10 을 받으시면 됩니다.
2007/05/31 06:36 2007/05/31 06:36
강분도

Mod_url.c 감사 드립니다.

김정균

kldp.net 버전과 oops.org 버전이 merge 가 되었습니다. 제가 kldp.net 의 mod_url 의 개발자로 등록이 되어 정식 배포처는 http://modurl.kldp.net 을 이용하세요.

LeCieL

수정하지 않은 modurl의 문제입니다.
worker 에 그냥 기존에 있던거 올리고나서 돌린게 답니다;;
apache php 가 아닙니다. 미디어 전송 전용서버이므로
apache만 달랑 올라가있습니다.
돌고있는 모듈은 몇안되고 redurl이 여기에 있다가 부하 폭주시 워커의 줄사망이 있었습니다.

전송트래픽은 초당 400메가정도 됩니다. 커넥션은 폴링되고 있지만 약 4만개정도 사용하고 있구요

워커모듈에 별도로 돌고있는것은 메모리 캐시 모듈입니다.

지금버전을 테스트하기에는 실제 서버라 힘들듯합니다.

LeCieL

네 제가 써논 문서에도있다시피;; utf8 인코딩에 대한 단점이 있지요 ^^

참고로 redurl 을 위 형식대로 수정하였다가 스레드가 줄사망한것으로 기억합니다.. 커넥션이 엄청나게 많은 서버라 그래서 그런지;;
초반엔 멀쩡하다가 6시간정도 지나면 스레드가 덜렁 하나 남아있는 사태가 몇번 있었죠..
그래서 다른 소스로 변환했습니다.

김정균

일단은 어떻게 수정을 하셨는지 코드를 공개를 하지 않으셨기 때문에 mod_url 이 문제인지 아니면 수정한 부분이 문제인지는 저로서는 판단을 할 수 없고, mod_url (IE7 문제 수정전의 코드) 와 현재 제가 새로 수정한 부분을 worker 모델에서 2일동안

echo "한글.txt" > ./uri.txt
while [ 1 ]; do
ab -c 100 1000 http://localhost/test/$(iconv EUC-KR UTF-8 ./uri.txt)
done
rm -f ./uri.txt

와 같이 돌리고 있는데 별 문제 없는 것 같습니다. 한번 테스트 해 줘 보시죠. (음 Apache 2 thread safety issues 문서를 보니 race condition 하게 발생하기 때문에 thread safe 하다고 보장은 못하겠군요. 그래서 이 멘트 남깁니다. ^^)

그리고 apache + php 환경은 worker model 로는 별로 적합하지 않다고 생각이 됩니다만.. 일단 php extension 들이 thread safe 를 보장하지 못하고, apache 와 php 를 build 하기 위한 library 들이 thread safe 를 보장하지 못하는데 mod_url 이 아니라 다른 무엇이 문제가 될 수도 있을 테지요.

그리고, 수정한 일본의 모듈은 아마 mod_encoding 이 아닐까 예상합니다 :-) 이 모듈 역시 예전에 회자가 되어 어느정도 코드는 본 것입니다. 실제로 mod_url 역시 hooking first 로 처리를 해 보려고 했으나 완벽한 지원이 어려워 그냥 hooking last 로 처리한 것이고요. 그리고 수정된 mod_url 은 기존의 mod_url 코드와는 다릅니다. 현재 박 원규님과 메일을 주고 받고 있는데, 만약 받아들여지지 않는다면 혼동을 피하기 위해서 mod_url2 정도로 fork 할 듯 싶습니다.

LeCieL

수고가 많으시네요 ;;

그런데 redurl (modurl) 말고 일본에서 사용하던 뭐더라;; 저는 그걸 기반으로 작업했답니다.
일단 패치할 시간이 거의 없었고;; ie7 나온지 하루이틀안에 해결봐야해서 ㅎㅎ;;

그런데 성능적인 문제 (1대의 미디어 서버)를 감안한 경우 first hook 에 charset detection 이 들어가는것이
압도적인 차이를 준다고 생각합니다.

(물론 last 로 후킹하여 전처리 다 하고 매 컨버저닝마다 파일이 있는지 체크하는것도 좋습니다
그러나 워커모듈에서는 요러다 에러하나 나면 줄사탕인지라 ;;)

제가 패치한건 일반서버는 아예 이 모듈을 내려버렸고 (급한관계로),
컨텐츠 전송서버만 first hook 으로 강제 변환하도록 설정하였습니다. 아마도 그 일본에서 만든 modurl같은녀석을
여기저기 뜯어고쳤던듯합니다;;

김정균

redurl(mod_url) 은 요청하신 페이지가 존재하면 작동하지 않습니다. 즉, 해당 페이지가 존재하지 않을 경우에만 작동합니다. 이는 httpd.conf 에서 error log level 을 debug 로 맞추어 놓고선 error log 를 보시면 확인하실 수 있습니다.

hooking 을 전처리로 할 때의 문제는, 무조건 바꾸기 때문에 file system 에 정말 utf8 로 인코딩된 파일이름이 존재하고 있을 경우 찾을 수가 없습니다. 또한, Alias 와 같은 URL 을 처리할 수 없습니다. 저도 전처리로 하려고 했으나 이 부분 때문에 결국에는 LAST 로 처리한 것입니다.

그리고, worker model 은 솔직히 뭐라고 말은 못하겠습니다. 일단 mod_url 자체가 thread safe 한지 보장을 하지 못하기 때문에 worker model 에서 사용을 하라고 권장 자체를 못하기 때문입니다. :-)

김정균

apache 2 용은 1.10 이 아니라 1.12 입니다. 현재 2.0.52 와 2.2.3 에서 정상 작동 하는 것을 확인했습니다.

Posted
Filed under Tech/프로그래밍
IE7 에서 mod_url 이 설정되어 있는 서버로 한글 주소를 전송할 경우 encoding 이 맞으면 (즉, mod_url 이 작동할 일이 없으면..) 문제가 없지만, 맞지 않을 경우에는 무한 루프에 빠지게 되는 문제가 있습니다. 즉 예를 들어서, 다음의 조건에 해당될 경우 입니다.

  1. IE7 이 URL 의 utf8로 전송한다. (기본값임)
  2. 서버측의 mod_url 이 다음과 같이 설정이 되어 있다.
    CheckURL on ServerEncoding EUC-KR ClientEncoding UTF-8


이 조건에서, IE7 이 http://domain.com/한글.html 을 전송을 하면 실제로는

http://domain.com/%ED%95%9C%EA%B8%80.html


과 같이 "한글" 이 utf8 로 인코딩 되어 전송이 됩니다. (위에서는 편의상 urlencoding 을 했습니다. euc-kr 의 경우 인코딩을 하면 4byte 이지만, utf8 의 경우 6byte 가 되는 것으로 구분을 하기 위함입니다.)

그리고, 서버에서는 mod_url 이

iconv ("UTF-8", "EUC-KR", "%ED%95%9C%EA%B8%80");


이 성공을 하기 때문에

HTTP/1.1 301 Moved Permanently Location: http://domain.com/한글.html


을 브라우저에게 전송하게 됩니다. IE6 의 경우 이렇게 전달된 주소를 그대로 이용하기 때문에 문제가 없었는데, IE7 부터는 이 주소의 "한글" 을 다시 UTF8 로 만들어 재전송하기 때문에 무한루프에 빠지게 되는 겁니다. 그래서 이를 해결하기 위해서 return 하는 Location 의 주소를 RFC1738에 의거하여 URL encoding 하여 브라우저로 전송해 주는 방법을 사용할 수 있습니다.

HTTP/1.1 301 Moved Permanently Location: http://domain.com/%C7%D1%B1%DB.html


이를 해결하기 위해서는 다음 URL 을 참조 하시기 바랍니다.

KLDP.net mod_url project
OOPS.org mod_url CVS tree
2007/05/28 01:42 2007/05/28 01:42

며칠전에 IE7 과 mod_url 문제 수정 이라는 글에서 IE7 에서 한글 URI 를 사용할 경우 mod_url 과의 충돌로 무한 루프가 발생하는 문제를 수정하여 포스팅을 했었습니다. 그 과정에서, 301 로 재접속을 시킬때, IE7 의 재변환을 막기 위하여 url encoding 을 하여 문제를 해결했는데, 그 해결을 위해 사용했던 코드가 php raw_url_encode 함수를 수정하여 처리를 했습니다. 그런데, PHP license 와 Apa..