2007년 11월 15일 목요일

apache+tomcat 5 사용시 get 한글깨짐 해결

[Apache HTTPD] 한글 URL 해석문제 mod_url 사용
Apache를 웹 서버로 쓰면서 서버 인코딩이 EUC-KR로 설정되어 있고, 그 상태에서 웹 브라우저에서 URL 인코딩이 안 된 상태의 한글 URL을 보내면 서버 측에서 인식을 못하는 문제가 있다.

그리고 사실 이 문제는 IE에서만 나타난다. FireFox는 한글이 들어오면 현재 설정 인코딩에 따라 URL인코딩을 변경해서 보내기 때문이다. 그렇지만 IE는 UTF-8로 보낸다. 그렇다고 IE탓을 할 수만도 없다.

현재 내가 관리해야 할 서버는 Apache 2, Solaris 8 이며 아파치는 SunFreeware에서 받아서 깔았다.

mod_url 홈페이지의 CVS Viewer를 통해서 Apache 1.3 혹은 Apache 2 에 해당하는 mod_url.c 파일을 다운로드 한다. 정확한 버전을 받아야만 한다.

나의 경우 Solaris 에 SunFreeware로 부터 받은 gcc 등이 모두 깔려 있는 상태였다.

그 파일을 컴파일 한다.


$ apxs -i -a -c mod_url.c



apxs 가 실행되지 않는다면 perl의 주소가 잘 못됐기 때문일 수 있다. apxs 파일을 열고 perl의 경로를 확인하고 그 경로에 perl의 링크를 걸어주면 된다.(나의 경우 cd /usr/local/bin;ln -s /bin/perl 을 해야만 했다)
아래를 httpd.conf 에 추가한다.


<IfModule mod_url.c>
  CheckURL On
  ServerEncoding EUC-KR
  ClientEncoding UTF-8
</IfModule>



클라이언트(웹 브라우저)가 UTF-8로 보낸 URL을 아파치가 EUC-KR로 재해석한다.

그리고 또 다른 문제가 있는데, 아파치를 거쳐서 JSP로 전달되는 파라미터들은 필히!! URLEncoding을 해야만 한다.
URL인코딩을 안하면 한글 파라미터들을 아파치가 UTF-8 인코딩으로 간주하고 엉뚱한 문자로 바꿔버린 상태로 JSP에 전달되고 JSP는 그걸 EUC-KR로 가정해버리게 되기 때문이다.

아파치를 사용하던 안 하던 무조건 URLEncoding을 해서 파라미터를 넘기는 것은 필수이다!!


추가 : URLEncoding을 하는 것이 필수라는 사실은 변함이 없지만, 아파치 + mod_url을 사용할 경우 JSP에 넘기는 파라미터에 한글등이 들어가 있을 때 URLEncoding이 된 값 조차도 인코딩을 마음대로 변경시켜버리는 문제가 있다. 현재 해결책을 찾는 중.

Apache가 GET 방식의 파라미터 값의 인코딩을 변경하는 문제 해결
이 문제는 사실 아파치의 문제가 아니라 Tomcat 5.x 의 문제였다. server.xml의 mod_jk 로 연결하는 커넥터 설정 부분에다가도 URIEncoding="euc-kr"이 필요하다.
<Connector port="8009"
enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" URIEncoding="euc-kr"/>


참조 :
 http://kltp.kldp.org/stories.php?story=01/01/29/5413242

댓글 없음:

댓글 쓰기