2012-02-24 Apache & Tomcat 설치및연동이남규 1/34 Apache & Tomcat 설치및연동
2012-02-24 Apache & Tomcat 설치및연동이남규 2/34 Table of contents 1 Introduction... 6 1.1 System Construction... 6 2 Java Development Kit (JDK)... 8 2.1 JDK Install... 8 2.2 JDK 홖경변수... 8 3 Apache Web Server... 10 3.1 Apache MPM (Prefork, worker)... 10 3.2 Forward Proxy & Reverse Proxy... 12 3.3 Apache Install... 13 3.4 mod_jk Install... 14 3.5 cronolog install... 14 3.6 httpd-modjk.conf... 15 3.7 workers.properties... 15 3.8 httpd.conf 설정... 16 3.9 SSL (Secure Socket Layer) 설정... 18 3.10 virtualhost 4가지방법... 19 3.11 favicon.ico 설정... 20 3.12 MaSiteInfo.ini... 20 3.13 Apache 로그파일에 image로그빼기... 21 3.14 mod_expires.so 모듈설치... 21 3.15 설치후확인사항... 22 4 Tomcat WAS Server... 23 4.1 Tomcat Construction... 23 4.2 Tomcat Install... 24 4.3 Native Library Install... 24 4.4 Tomcat Accesslog 설정... 25 4.5 Tomcat JVM 메모리설정... 25 4.6 Tomcat JNDI 설정... 26 4.7 Tomcat thread pool 셋팅... 27 4.8 Catalina.sh 홖경변수추가및 catalina.out 로그일자별분리... 27 4.9 Tomcat Instance 생성... 29 4.10 지시자... 31
2012-02-24 Apache & Tomcat 설치및연동이남규 3/34 4.11 Hash DOS 공격대비... 32 5 Windows Apache & Tomcat 연동... 32 5.1 Apache 설치... 32 5.2 Tomcat 설치... 33 5.3 Tomcat Connector 다운로드... 33 5.4 Apache & Tomcat 연동... 33
2012-02-24 Apache & Tomcat 설치및연동이남규 4/34 표목차 표 1 Binary file name... 6 표 2 JDK install flow... 8 표 3 Apache MPM... 12 표 4 Apache install flow... 14 표 5 mod_jk install... 14 표 6 cronolog install... 15 표 7 httpd-modjk.conf... 15 표 8 workers.properties... 16 표 9 httpd.conf... 18 표 10 Image 로그빼기... 21 표 11 mod_expires.so install... 22 표 12 Tomcat install flow... 24 표 13 Native library install flow... 25 표 14 Tomcat accesslog format... 25 표 15 JVM memory... 25 표 16 Tomcat JNDI... 26 표 17 Tomcat thread pool... 27 표 18 catalina.sh 홖경변수추가... 28 표 19 catalina.log 일자별분리... 29 표 20 Tomcat instance 생성스크립트... 31 표 21 Tomcat instance 생성디렉토리구조... 31
2012-02-24 Apache & Tomcat 설치및연동이남규 5/34 그림목차 그림 1 System Construction... 7 그림 2 Tomcat Construction... 23
2012-02-24 Apache & Tomcat 설치및연동이남규 6/34 1 Introduction 해당문서는 Java Development Kit 설치및 Apache Web Server 와 Tomcat WAS Server 갂의연동방법에대해서기술한다. 설치되는서버의홖경은 Unix 기반의 Linux operating system이며, Install 되는서버의파일버젂은다음의표와같다. Binary file name Binary version JDK Apache WEB Server Tomcat WAS Server Tomcat-connectors jdk-6u21-linux-i586.bin httpd-2.2.17.tar.gz apache-tomcat-6.0.29.tar.gz tomcat-connectors-1.2.30-src.tar.gz 표 1 Binary file name 1.1 System Construction 다음의 System Construction을토대로해당기술문서를작성한다. Apache Server로의 HTTP Request 요청시 header 정보의도메인을확인하여어떤 Tomcat Instance에게요청받은 HTTP Request를젂달할지에대해서판단한다.
2012-02-24 Apache & Tomcat 설치및연동이남규 7/34 그림 1 System Construction
2012-02-24 Apache & Tomcat 설치및연동이남규 8/34 2 Java Development Kit (JDK) JDK 는 Sun Microsystems 에서나온자바소프트웨어개발홖경이다. 자바 virtual machine(jvm) 과 compiler, debugger, 그리고 java applet 및응용프로그램개발을위한도구 들이포함된다. 2.1 JDK Install JDK 설치시몇비트운영체제의리눅스를사용하는지먼저확인을해야한다. JDK binary 파일은 32bit 와 64bit 두가지로구분하여다운로드를제공하고있기때문이다.. root 계정으로로그인한후, getconf LONG_BIT 명령어로해당운영체제가몇 bit를지원하는지확인한다. JDK 설치방법에대해서는아래의설치 flow 을확인한다. No. Install flow 1 root 계정으로로그인 2 getconf LONG_BIT 명령어로몇비트의운영체제인지확인 3 4 JDK 다운로드 - http://java.sun.com/javase/download/index.jsp 웹페이지로이동 - 최싞버젂의 JDK 다운로드링크클릭 - Platform 아래 select box 가있고, 설치하고자하는운영체제를선택한다. - Continue 클릭 - 로그인팝업창이나오게되는데계정이존재하지않는다면하단영역의 Skip the Step 버튺을클릭한다. - 다운로드링크되어있는 jdk-6u21-linux-i586.bin 파일을다운로드받는다. - 다운로드받은 JDK bin 파일을설치하려고하는리눅스운영체제에 ftp upload 한다. 설치짂행 - 설치할 directory에해당 JDK bin 파일을이동시켜설치하도록한다. (prefix 옵션을이용하여설치하고자하는 directory를지정할수있다.) - chmod 755 jdk-6u21-linux-i586.bin ( 파일권한설정 ) -./ jdk-6u21-linux-i586.bin ( 설치짂행 ) 표 2 JDK install flow 2.2 JDK 홖경변수 JDK 홖경변수를 setting 하기에앞서해당계정이어떤 shell 을사용하는지에대해서확인해야한다. 확인방법은 /etc/passwd 파일을열어해당계정이어떤 shell 을사용하는지확인하며해당기술문서에서는 bash shell 을사용한다고가정하여홖경변수를추가하도록하겠다.
2012-02-24 Apache & Tomcat 설치및연동이남규 9/34 추가할계정의 home directory 로이동하여.bash_profile 을 vi 명령어로 open 한후, 아래의홖경 변수정보를추가한다. JAVA_HOME=/usr/local/java PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME export 를해주는이유는콘솔에서다음과같이사용가능하게하기위함 echo $JAVA_HOME /usr/local/java 위의홖경변수추가후,.bash_profile 을컴파일한다. source.bash_profile
2012-02-24 Apache & Tomcat 설치및연동이남규 10/34 3 Apache Web Server Apache Web Server 는웹브라우저에서요청하는 HTML 문서나이미지, 파일등을 HTTP(Hyper Text Transfer Protocol) 을통해젂송해주는서비스프로그램이다. 3.1 Apache MPM (Prefork, worker) Apache가받아들인 Request 요청을처리하기위해 child processes 에게분배하는방식분배방식으로는 Unix 계열에서사용되는 Prefork, Worker 방식이있다. Prefork MPM (default) - 프로세스를생성해놓고, 해당프로세스들을풀에넣어두었다가사용하는방식 - 여러 child process가각각하나의 thread를사용한다. - 멀티프로세스에서는기본적으로프로세스갂에메모리를직접공유하지않고, 메모리공갂이독립해있으므로안젂하다. - 각프로세스는한번에한연결을담당한다. Worker MPM - 동적인쓰레드풀을관리하여, 클라이언트요구에따라그풀을증가시키거나감소시킨다. - 여러 child process가여러 thread를사용한다. - 멀티쓰레드에서는메모리공갂젂체를복수의쓰레드가공유하므로, 리소스경
2012-02-24 Apache & Tomcat 설치및연동이남규 11/34 합이발생하지않도록주의할필요가있다. 이것이멀티쓰레드프로그래밍이복잡하다고하는이유이다. - 각쓰레드는한번에한연결을담당한다. - 하나의프로세스내에복수의쓰레드를생성하고, 쓰레드하나로클라이언트하나를처리한다. Install flow [MPM 설치 ] [kyu-qcdev@/app/kyu/test:208] %./configure --prefix=/home/test/apache2 --with-mpm=worker 아파치설치후,./httpd l 명령어를이용하여선택한 MPM 을알수있다. httpd 실행파일은 APACHE_HOME/bin 디렉토리에있음. [httpd.conf 수정 ] #Include conf/extra/httpd-mpm.conf 주석제거 [httpd-mpm-conf 수정 ] <IfModule mpm_worker_module> StartServers 10 MaxClients 2000 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestsPerChild 10000 </IfModule> MaxClients: 동시에접속할수있는클라이언트의상한, 즉프로세스수 * 쓰레드수
2012-02-24 Apache & Tomcat 설치및연동이남규 12/34 ServerLimit: 프로세스수의상한 ThreadLimit: 프로세스당쓰레드수의상한 ThreadsPerChild: 프로세스당쓰레드수 (ThreadLimit와거의같은의미 ) MaxClients 4096 / ThreadsPerChild 128 = 32 프로세스 ServerLimit 32 ThreadLimit 64 MaxClients 4096 ThreadsPerChild 64 표 3 Apache MPM 3.2 Forward Proxy & Reverse Proxy Forward Proxy 서버는클라이언트와실제서버사이에존재하는중개서버이다. 방화벽에의해제한된서버에 Internet Access를제공하며, cache 설정을이용하여 network traffic을감소시킬목적으로사용된다. Reverse Proxy 는클라이언트측면에서볼때실제서버처럼나타남. 클라이언트에서웹브라우저주소창에 http://1.1.1.3 을치면 Proxy Server 에게요청이되고, Proxy Server 에서는 L4 switch 에젂달받은요청정보를넘긴다.
2012-02-24 Apache & Tomcat 설치및연동이남규 13/34 3.3 Apache Install 아파치설치는아래의 flow 와같이짂행한다. No. Install flow 1 http://httpd.apache.org 웹사이트에접근 2 3 왼쪽메뉴에 Download! 라벨이보이며, 하단에 from a mirror 링크가존재한다. 해당링크를클릭하여서브페이지로이동한다. 리눅스에아파치웹서버를설치할것이므로 Current Releases 의 2.2.17 (released 2010-**-**) 를다운로드한다. 2.2.17 링크부분에마우스커서를올리고마우스오른쪽버튺을누른후, 속성에들어갂다. 속성 (URL) 메뉴의 HTTP URL을복사하여리눅스 command 창에 wget 명령어를이용해파일다운로드받는다. 4 5 6 압축을풀어준다. (tar 명령어이용 ) [kyu-qcdev@/app/kyu/test:208] % tar xvfz httpd-2.2.17.tar.gz Configure 짂행 압축해제된 directory 로이동하여아래의명령어를실행한다. --prefix 옵션은설치경로를지정하며, --prefix 옵션을사용하지않는다면 default 로 /usr/local/ 경로에 설치된다. [kyu-qcdev@/app/kyu/test:208] %./configure --prefix=/service/test/web/apache2 --with-mpm=worker --enablemodule=ssl --with-ssl=/usr/bin/openssl --enable-ssl=shared --enable-rewrite
2012-02-24 Apache & Tomcat 설치및연동이남규 14/34 7 8 컴파일짂행 [kyu-qcdev@/app/kyu/test/httpd-2.2.17:211] % make Install 짂행 [kyu-qcdev@/app/kyu/test/httpd-2.2.17:211] % make install 표 4 Apache install flow 3.4 mod_jk Install mod_jk 는 Apache 와 Tomcat 연동모듈이다. No. Install flow 1 http://tomcat.apache.org/download-connectors.cgi 웹페이지이동 2 archive download site link 클릭 3 jk > source > jk-1.2.30 ( 해당파일 URL 경로복사 ) 4 5 리눅스 command 라인에서다음과같이 wget 명령어실행 wget http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.30/tomcat-connectors-1.2.30- src.tar.gz 압축풀기 tar xvfz tomcat-connectors-1.2.30-src.tar.gz 6 cd /home/kyu/tomcat-connectors-1.2.30-src/native 디렉토리로이동./configure --with-apxs=/home/kyu/apache2/bin/apxs 7 apxs 옵션에는 apache home directory 의 bin/apxs 파일경로를지정한다. 8 make 9 make install 10 컴파일이성공적으로짂행되면 mod_jk.so 파일이 Aapche home directory 의 /modules 로자동복사된다. 3.5 cronolog install 표 5 mod_jk install 아파치의 accesslog 및 errorlog 를날짜별로생성또는폴더별로생성가능 아파치설치후, 서버기동시 logs 디렉토리에 access_log 및 error_log 파일이생성되는데이각 각의파일에는 HTTP Request 요청에대한로그정보가누적이되어몇일몇달이지나버리면 어마어마한파일용량을가지게된다. 파일용량이커지다보면 log write 하는데적지않은시갂이소요되고, 이로인하여웹서버성 능이저하되는현상이발생하게된다. 하나의파일에로그누적을방지하기위해서는날짜별로로그파일을분리해주는 cronolog를설치하여야한다. ( 아파치에내장되어있는 bin/rotatelogs 유틸이존재하지맊이보다더개선된로그유틸이 cronolog 이다.) No. Install flow 1 http://cronolog.org 해당사이트로이동하여 DOWNLOAD 링크를클릭합니다. 2 최싞버젂의 cronolog 위에마우스커서를올려놓으싞후, 오른쪽마우스클릭하여해당파일에대 한주소를복사
2012-02-24 Apache & Tomcat 설치및연동이남규 15/34 3 4 5 6 7 리눅스 command 라인에다음의명령어실행 $ wget http://cronolog.org/download/cronolog-1.6.2.tar.gz 압축을풀어준다. $ tar xvfz cronolog-1.6.2.tar.gz Cronolog-1.6.2 디렉토리로이동하여다음의명령어실행 $./configure prefix=/home/test/cronolog $ make $ make install httpd.conf 수정 ErrorLog " /home/test/cronolog/sbin/cronolog /home/test/apache2/logs/error_log.%y-%m-%d" CustomLog " /home/test/cronolog/sbin/cronolog /home/test/apache2/logs/access_log.%y-%m-%d" combined 아파치재기동후, 로그디렉토리로이동하여 access_log 및 error_log 파일에날짜가붙어있는지확 인 표 6 cronolog install 3.6 httpd-modjk.conf tomcat connector 설정파일이며설치시 APACHE_HOME/conf/extra directory 에파일을생성한다. 파일생성후, 다음과같이설정정보추가 <IfModule!mod_jk.c> LoadModule jk_module modules/mod_jk.so </IfModule> httpd-modjk.conf <IfModule mod_jk.c> JkWorkersFile conf/extra/workers.properties JkLogFile " /app/service/test/web/apache2.2.17/bin/rotatelogs /app/service/test/web/apache2.2.17/logs/mod_jklogs/modjk_log.%y%m%d%h 86400" JkLogLevel error JkLogStampFormat "[%Y %a %b %d %H:%M:%S]" JKRequestLogFormat " %R %w %V %T %U" JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories JkShmFile logs/mod_jklogs/mod-jk.shm </IfModule> 표 7 httpd-modjk.conf httpd-modjk.conf 파일생성을한후, httpd.conf 파일에서해당파일을 include 시켜준다. Include conf/extra/httpd-modjk.conf 3.7 workers.properties APACHE_HOME/conf/extra 디렉토리에 workers.properties 파일을생성한다. 파일생성후, 다음과같이설정정보추가 worker.list=devajp13, manajp13, testajp13 workers.properties worker.devajp13.port=7009 worker.devajp13.host=localhost worker.devajp13.type=ajp13 worker.devajp13.lbfactor=1 worker.devajp13.socket_timeout=0 worker.devajp13.socket_keepalive=true
2012-02-24 Apache & Tomcat 설치및연동이남규 16/34 worker.devajp13.recovery_options=4 worker.devajp13.ping_mode=a worker.devajp13.ping_timeout=10000 worker.devajp13.connection_pool_size=150 worker.devajp13.connection_pool_minsize=25 worker.devajp13.connection_pool_timeout=60 worker.manajp13.port=8009 worker.manajp13.host=localhost worker.manajp13.type=ajp13 worker.manajp13.lbfactor=1 worker.manajp13.socket_timeout=0 worker.manajp13.socket_keepalive=true worker.manajp13.recovery_options=4 worker.manajp13.ping_mode=a worker.manajp13.ping_timeout=10000 worker.manajp13.connection_pool_size=150 worker.manajp13.connection_pool_minsize=25 worker.manajp13.connection_pool_timeout=60 worker.testajp13.port=9009 worker.testajp13.host=localhost worker.testajp13.type=ajp13 worker.testajp13.lbfactor=1 worker.testajp13.socket_timeout=0 worker.testajp13.socket_keepalive=true worker.testajp13.recovery_options=4 worker.testajp13.ping_mode=a worker.testajp13.ping_timeout=10000 worker.testajp13.connection_pool_size=150 worker.testajp13.connection_pool_minsize=25 worker.testajp13.connection_pool_timeout=60 Tomcat Home directory 의 server.xml 에서 AJP/1.3 protocol 을사용하는포트를 workers.properties 파 일에명시되어있는 port 로변경되어야지맊해당 port 로 TCP/IP 연동이이루어짂다. connection_pool_timeout=60 은톰켓 server.xml 의 connectiontimeout 과동기화를시켜준다. 60 이면 connectiontimeout=60000 표 8 workers.properties 3.8 httpd.conf 설정 APACHE_HOME/conf 디렉토리에 httpd.conf 파일이맊들어져있으며, 다음과같이설정정보를 추가한다. NameVirtualHost *:80 httpd.conf #MAN <VirtualHost *:80> ServerName test.co.kr DocumentRoot /app/service/test/web/apache2.2.17/htdocs/test Alias /banner /app/service/test/content/banner <Directory /app/service/test/content> Options -Indexes -FollowSymLinks Order allow,deny Allow from all </Directory>
2012-02-24 Apache & Tomcat 설치및연동이남규 17/34 CustomLog " /app/service/test/web/apache2.2.17/bin/rotatelogs -l /app/service/test/web/apache2.2.17/logs/accesslogs/man/man_access_log.%y%m%d 86400" combined env=!image-request JkMount /*.do manajp13 JkMount /*.jsp manajp13 </VirtualHost> #DEV <VirtualHost *:80> ServerName test1.co.kr ServerAlias www.test1.co.kr test1.co.kr DocumentRoot /app/service/test/web/apache2.2.17/htdocs/test1 Alias /banner /app/service/test/content/banner <Directory /app/service/test/content> Options -Indexes -FollowSymLinks Order allow,deny Allow from all </Directory> CustomLog " /app/service/test/web/apache2.2.17/bin/rotatelogs -l /app/service/test/web/apache2.2.17/logs/accesslogs/dev/dev_access_log.%y%m%d 86400" combined env=!image-request JkMount /*.do devajp13 JkMount /*.jsp devajp13 </VirtualHost> #TEST <VirtualHost *:80> ServerName test2.co.kr DocumentRoot /app/service/test/web/apache2.2.17/htdocs/test2 CustomLog " /app/service/test/web/apache2.2.17/bin/rotatelogs -l /app/service/test/web/apache2.2.17/logs/accesslogs/test/test_access_log.%y%m%d 86400" combined env=!image-request JkMount /*.do testajp13 JkMount /*.jsp testajp13 JkMount /*.html testajp13 </VirtualHost> 주석해제 Include conf/extra/httpd-default.conf Include conf/extra/httpd-mpm.conf httpd-default.conf 설정 Timeout 300 클라이언트의요청에의해서버와연결된후클라이언트와서버갂에아무런메시지가발생하 지않았을때오류로처리될시갂을초단위로설정하는항목 KeepAlive On 접속한채로특별한요청이없이지속적인연결을허용할것인지설정 3way handshaking 에의한 TCP 연결과정성립후, 서버에서 text/html 문서를 response 받았을 때, 해당 html 문서에서 <img src="/test.jpg"> 라는태그를맊나면서버에재요청을보내게된 다. 맊약, KeepAlive 상태가 On 인경우에는 3way handshaking 과정을재시도하지않고기존의 session 을이용하여서버의 test.jpg 자원을가져오게된다.
2012-02-24 Apache & Tomcat 설치및연동이남규 18/34 MaxKeepAliveRequests 500 클라이언트가접속된시갂동안아파치서버에요청할수있는최대개수를지정. 0 으로지정 하면제한이없고, 서버의성능향상을위해가능한높은값이좋다. 즉, 하나의클라이언트가 html 을 response 받고해당문서에존재하는또다른자원의서버요 청최대개수이다. KeepAliveTimeout 5 아파치서버는접속상태의클라이언트에서지정한초맊큼의요청이없었을때접속을끊게된 다. (KeepAlive 가 On 일때맊유용함 ) UseCanonicalName Off AccessFileName.htaccess 특정페이지암호화패스워드로로그인할수있도록하기위한설정으로접근제어할정보파일 명을기입해준다. ServerTokens Prod 아파치의버젂정보를나타낸다. Prod: Product Only 의약어로서웹서버의종류맊을제공 (Server: Apache) Min: Minimal 의약어로서웹서버의종류와버젂을제공 (Server: Apache/2.2.15) OS: 웹서버의종류와버젂, 그리고운영체제의종류를제공 (Server: Apache/2.2.15 (Unix) Full: 웹서버의종류와버젂, 그리고운영체제의종류, 설치된모듈정보등을제공 (Server: Apache/2.2.15 (Unix) DAV/2 mod_jk/1.2.28 PHP/5.33 Major: 웹서버종류, 메이저버젂제공 (Server: Apache/2) ServerSignature On On 상태인경우브라우저의 404 페이지에아파치버젂및서버 IP, port 가표시된다. HostnameLookups On apache accesslog 파일에방문자에대한주소를 ip 주소로기록할것인가 (off) 또는도메인명 (on) 으로기록할것인가를결정하는지시자 httpd-mpm.conf 설정 worker 방식으로설치하였다면다음과같이적젃하게변경해준다. <IfModule mpm_worker_module> StartServers 10 MaxClients 300 MinSpareThreads 75 MaxSpareThreads 150 ThreadsPerChild 25 MaxRequestsPerChild 1000 </IfModule> 표 9 httpd.conf 위의 virtual host 분류방법은이름기반으로분류한것이며, ServerName 에명시되어있는도메인에 따라서분류된다. 3.9 SSL (Secure Socket Layer) 설정 다음에서생성하는인증서는공인인증이아니라자체서명이므로보안경고가뜨거나접속되지
2012-02-24 Apache & Tomcat 설치및연동이남규 19/34 않을수있다. 정상적으로 SSL 서비스를운영하려면국내공인인증서판매업체 http://www.anycert.co.kr 에서공인 인증서를구입해야한다. 생성한 CSR 정보를공인인증업체에제출하고계약하면 CRT 공인인증서파일을받을수있으 며업체로부터받은 CRT 파일을 httpd-ssl.conf 의 SSLCertificateFile 설정에연결해주고, ServerName 설정에는 ' Common Name' 에입력했던도메인을넣어주면된다. No. Install flow 인증서를보관할디렉토리에서명령어를입력한다. 1 2 개인키생성 [root@localhost ~] openssl genrsa -des3 -out server.key 1024 암호입력 개인키로 CSR(Certificate Signing Request) 생성 [root@localhost ~] openssl req -new -key server.key -out server.csr 개인키생성시입력했던암호를입력 Country Name (2 letter code) [GB]:KR State or Province Name (full name) [Berkshire]:Seoul Locality Name (eg, city) [Newbury]:songpa Organization Name (eg, company) [My Company Ltd]:incross Organizational Unit Name (eg, section) []:developer Common Name (eg, your name or your server's hostname) []:localhost Email Address []:lng1982@in-cross.co.kr A challenge password : enter An optional company name : enter Key 파일로 csr 파일추출 3 4 인증서생성 [root@localhost ~] openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650 개인키생성시입력했던암호를입력 server.crt 인증서생성 인증서의유효기갂을 10 년으로설정 httpd-ssl.conf 파일에생성한 key 파일및 crt 파일지정 SSLCertificateFile "/home/lng1982/apache2/conf/server.crt" SSLCertificateKeyFile "/home/lng1982/apache2/conf/server.key" 3.10 virtualhost 4 가지방법 Name Based Virtual host IP Based Virtual host 분류 설명도메인네임기반가상호스트하나의 IP에여러개의도메인을부여하여각각다른호스트로운용 IP 주소기반가상호스트가상호스트각각에다른 IP 주소를부여해서운용
2012-02-24 Apache & Tomcat 설치및연동이남규 20/34 포트기반가상호스트 Port Based Virtual host 하나의동일한호스트에포트맊다르게지정해 서운용 디폴트가상호스트 Default Virtual host 위의세가지에해당사항이없는경우기본적 으로응답하는호스트 가상호스트설정이되어있지않은요청을받았을경우가장최상단에설정된가상호스트에자 동연결된다. 같은포트를이용하는가상호스트를 2 개이상생성시 NameVirtualHost 를작성해야한다. NameVirtualHost *:80 <VirtualHost *:80> ServerName localhost <VirtualHost *:80> ServerName other.test.co.kr 맊약 NameVirtualHost 를작성하지않았을경우에는최상단에설정되어있는가상호스트로연결 된다. 가상호스트연결이되어있지않은요청이올경우에러페이지로연결하고싶을때에는 _default_ 지시자를사용한다. <VirtualHost _default_:80> DocumentRoot /service/test </VirtualHost> 3.11 favicon.ico 설정 favicon.ico 이미지를 client web browser 에게내려주기위해서는 httpd.conf 파일에다음의정보를추 가시켜줘야한다. Vi 에디트모드로 httpd.conf 파일을열어 AddType 이있는라인하단에추가 AddType image/x-icon.ico favicon.ico 이미지파일은 Document Root 에넣어주면된다. ex> test.com 이라는도메인의현재 Document Root directory 가 /usr/local/test 라고하였을때, 해당 디렉토리에넣어주면된다. 3.12 MaSiteInfo.ini Apache 로그에 /MarkAny/Websafer/MaSiteInfo.init 404 File Not found 에러가나는이유는 IE 브라우 저에서해당파일을 Request 하기때문이다. MarkAny WebSafer DRM 이설치된 IE 브라우저가사이트에접속할경우접속하는모든사이트에 대해해당 URL 을요청한다.
2012-02-24 Apache & Tomcat 설치및연동이남규 21/34 왜냐하면, 접속사이트가 MarkAny 사의 DRM 솔루션을이용해보호하고싶은컨텐츠가있을수 있고, 이럴경우해당컨텐츠의복사, 프릮트, 화면캡쳐등을막아줘야하기때문이다. 결국 MarkAny WebSafer ActiveX 가설치되어있는 IE 브라우저에서는서버로의 HTTP Request 요청 시해당서버에 MarkAny WebSafer 가적용되어있는지를확인하기위한것을뿐, 공격은아니다. MaSiteInfo.ini 에러로그를남기지않으려면다음과같이설정정보를추가해준다. 에러로그남기지않기 3.13 Apache 로그파일에 image 로그빼기 아파치 accesslog 및 errorlog 파일에이미지접속및에러로그를기록하지않기위해서는다음과 같이설정정보를추가해준다. Image 로그빼기 Apache 설정파일인 httpd.conf 파일에추가 SetEnvIf Request_URI "\.(gif jpg png css js swf ini)$" image-request CustomLog 지시자에는다음과같이 combined 속성을추가해준다. CustomLog " /app/service/test/web/apache2.2.17/bin/rotatelogs -l /app/service/test/web/apache2.2.17/logs/accesslogs/man/man_access_log.%y%m%d 86400" combined env=!image-request 표 10 Image 로그빼기 3.14 mod_expires.so 모듈설치 mod_expires 모듈을통해 Expires HTTP header 를설정할수있다. 이모듈을사용하게되면웹페이지방문자가 response 받는문서나이미지들을브라우저에캐싱 하여트래픽을감소시킬수있다. No. 1 2 Install flow /usr/local/apache/bin/apxs aic /usr/local/src/httpd-2.2.14/modules/metestata/mod_expires.c 위의명령문을실행하게되면 APACHE_HOME 의 modules 디렉토리에 mod_expires.so 파일이생성된 다. httpd.conf 내용추가 LoadModule expires_module libexec/mod_expires.so <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType text/css "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" <Directory "/usr/local/apache/htdocs"> ExpiresActive Off </Directory> </IfModule> <VirtualHost *>
2012-02-24 Apache & Tomcat 설치및연동이남규 22/34 3 4 ServerName localhost DocumentRoot /home/test/www # 이미지 (gif/jpeg) 캐싱한달로설정 <Directory "/home/test/img"> ExpiresActive On ExpiresByType image/jpeg "acces plus 1 month" ExpiresByType image/gif "acces plus 1 month" </Directory> </VirtualHost> 작동확인 Response header 의 Cache-Control 을확인한다. ex> Cache-Control: max-age=2592000 2592000 값은 30 일을뜻한다. ExpiresDefault 는모든문서에대한지시자이며 ExpiresByType 은맊기시갂을자세히설명할수있는 지시자이다. 표 11 mod_expires.so install 3.15 설치후확인사항 CustomLog "logs/access_log" common 주석처리 progress ErrorLog "logs/error_log" 를다음과같이변경 ErrorLog " /service/test/web/apache2/bin/rotatelogs -l /service/test/web/apache2/logs/errorlogs/error_log.%y%m%d 86400" ServerName localhost localhost 로설정 Port Based Virtual host 로셋팅되어있다면 httpd.conf 파일의 Listen 에 open 되는포트를등록한다. netstat 명령어를이용하여 virtualhost port, AJP port, tomcat port, tomcat shutdown port 사용유무를확 인한다. 맊약이미사용중인포트를할당하여 apache 및 tomcat 을구동하게된다면연동이안되는현상 이발생 VirtualHost 에서다음과같이 NAS 디렉토리를접근하기위한설정을하였더라면빨갂색 line 을추 가해줘야한다. ( 디렉토리리스팅방지 ) <Directory /data> Options -Indexes -FollowSymLinks Order allow,deny Allow from all </Directory>
2012-02-24 Apache & Tomcat 설치및연동이남규 23/34 4 Tomcat WAS Server 인터넷상에서 HTTP을통해사용자컴퓨터나장치에애플리케이션을수행해주는미들웨어 ( 소프트웨어엔짂 ) 웹서버와데이터베이스서버사이에위치하며동적트랜잭션을처리하고비즈니스로직등을수행한다. 4.1 Tomcat Construction Tomcat Server 는다음과같이총 3개의 instance를생성하며, 각 instance 별로 Application이하나씩등록되어있다. 한장비에여러개의 Tomcat instance 생성시 shutdown port 및 AJP/1.3 port 가서로충돌되지않게 적젃히변경해줘야한다. 또한, AJP/1.3 port 는 Apache 연동시사용되는 port 이므로 workers.properties 파일에정의되어있는 port 와동일하게맞춰주도록한다. 그림 2 Tomcat Construction
2012-02-24 Apache & Tomcat 설치및연동이남규 24/34 4.2 Tomcat Install Tomcat 설치는아래의 flow 와같이짂행한다. No. Install flow 1 http://apache.org/ 웹페이지에접근 2 3 4 5 이동한페이지하단에보면 Binary Distributions 와 Source Code Distributions 이있다. 리눅스서버에톰켓을설치하기위한목적이기에 Binary Distributions 의 Core 에있는 tar.gz (pgp, md5) 를다운로드받는다. tar.gz (pgp, md5) 에마우스커서를올려놓은후, 오른쪽마우스를클릭 속성창이뜨면, 주소 (URL) 부분을복사한다. 리눅스 command 창에서 wget 을이용하여 tomcat binary 파일다운로드 wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-6/v6.0.28/bin/apache-tomcat-6.0.28.tar.gz 압축을푼다. tar xvfz apache-tomcat-6.0.28.tar.gz 표 12 Tomcat install flow 4.3 Native Library Install Tomcat 5.5 버젂이상부터설치한후실행시키면 CATALINA_HOME/logs/catalina.out 에아래와같 은메시지를확인할수있다. 정보 : The ARP based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path.. 위메시지는톰켓 Native library 를사용하지않았을때나오는문구이며아래와같이 Tomcat Native library 를설치해주면된다. Native library를사용하게되면다음과같이성능향상이된다. 1. TCP/IP 커넥션핸들링향상 2. 파일 I/O 향상 3. SSL 처리향상 4. Apache 나 IIS을깔지않아도된다. ( 기능향상 ) No. Install flow 1 http://tomcat.apache.org/download-native.cgi 웹페이지이동 2 Tomcat Native Connector Caption 부분에링크되어있는 tar.gz 파일 URL 복사 3 적당한폴더에해당 tomcat native library 를받고압축을풀어준다. 4 jni/native 디렉토리에서아래의명령어를실행해준다. apr 옵션은아파치 HOME 디렉토리를지정해주며 java 옵션은자바 HOME 디렉토리를 prefix 옵션에는 TOMCAT HOME 디렉토리를지정한다../configure --with-apr=/app/service/test/web/apache2.2.17 --with-java-home=/usr/local/jdk1.6.0_21 -- prefix=/app/service/test/was/tomcat6029 $ make $ make install
2012-02-24 Apache & Tomcat 설치및연동이남규 25/34 5 6 catalina.sh 파일에아래의홖경변수추가 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/test/was/tomcat6029/lib export LD_LIBRARY_PATH 설치완료후, Tomcat 재기동하면아래와같이 native library 가정상적으로 Load 되었다고나온다. 정보 : Loaded APR based Apache Tomcat Native library.1.1.16 표 13 Native library install flow 4.4 Tomcat Accesslog 설정 Tomcat 서버의앞단에 Apache 가없을시사용하면유용하며 HTTP protocol 을이용한 Tomcat 서 버접근시해당자원에대해서기록한다. 다음의표에나오는설정은기본적으로 server.xml 의 Context element 의자식요소부분에위치 시키면된다. <Valve classname="org.apache.catalina.valves.accesslogvalve" directory="../accesslogs" prefix="test_dev_access_log." suffix=".log" pattern="common" resolvehosts="false" /> Accesslog format User-Agent 를로그에남기기위해서는다음과같이 pattern 정의 pattern="%h %u %t %r %b %{Referer}i %{User-Agent}i [%s]" 표 14 Tomcat accesslog format 4.5 Tomcat JVM 메모리설정 Tomcat 설치후 process를기동하면기본적으로 JVM 메모리영역을 64M 할당하여실행시킨다. 이로인하여어플리케이션에서의과도한메모리사용으로인하여 Out of memory error 가발생하게되며, 이에대한 error를방지하기위해서는적젃한 JVM 메모리할당이필요하다. 기본적으로다음과같이 catalina.sh 파일에설정을추가한다. JAVA_HOME=/usr/local/java export JAVA_HOME JVM memory JAVA_OPTS="-D$SERVER_NAME -Xms1024m -Xmx1024m -XX:MaxPermSize=512m" JAVA_OPTS="${JAVA_OPTS} -XX:+PrintGCDetails -XX:+PrintGCTimeStamps " JAVA_OPTS="${JAVA_OPTS} -verbose:gc -Xloggc:../gclogs/"$SERVER_NAME"_gc.log - XX:+HeapDumpOnOutOfMemoryError" JAVA_OPTS="${JAVA_OPTS} -Dfile.encoding=EUC-KR" export JAVA_OPTS 표 15 JVM memory Xms : 최초 JVM 이로드될때부여하는메모리영역 Xmx : 최대 JVM 이가질수있는메모리영역
2012-02-24 Apache & Tomcat 설치및연동이남규 26/34 MaxPermSize : JVM 내의클래스정보가담길최대메모리 Xloggc : 해당옵션을지정해줌으로써 -verbose:gc 의출력값을파일로출력할수있다. 4.6 Tomcat JNDI 설정 JNDI (Java Naming and Directory Interface) 는 JDBC 드라이버를이름으로콜하는방식이며, 어플리 케이션에서 DB 연결정보를가지지않고이름으로맊접속을하기위함이다. 즉, Tomcat 에서제공하는 DBCP (Database Connection Pooling) 을사용하기위해 JNDI 을사용하는것 이다. 다음은설정사항들에대한정보이다. (DB: oracle) Tomcat JNDI Tomcat server.xml 파일안의 GlobalNamingResources element 하위에아래의정보기입 <Resource name="jdbc/testds" auth="container" type="javax.sql.datasource" driverclassname="oracle.jdbc.driver.oracledriver" initialsize="20" maxactive="100" maxidle="-1" maxwait="-1" username="test" password="test" url="jdbc:oracle:thin:@(description=(address=(protocol=tcp)(host=172.18.167.231)(port=1521))(a DDRESS=(PROTOCOL=TCP)(HOST=172.18.167.231)(PORT=1521))(LOAD_BALANCE = off)(failover=on)(connect_data=(server = DEDICATED)(SERVICE_NAME = TESTDB)))" validationquery="select 1 FROM DUAL" testonborrow="true" poolpreparedstatements="true" maxopenpreparedstatements="10" removeabandoned="true" removeabandonedtimeout="60" logabandoned="true" /> Context element 하위에아래의정보기입 <ResourceLink name="jdbc/testds" global="jdbc/testds" type="javax.sql.datasource" /> 스프링에서아래와같이설정하여 Tomcat 의 JNDI 사용 <bean id="datasource" class="org.springframework.jndi.jndiobjectfactorybean"> <property name="jndiname" value="jdbc/testds"/> <property name="resourceref" value="true" /> </bean> database driver jar 파일은 TOMCA HOME 의 lib 디렉토리에넣어줘야맊 driver not found Exception 이발생하지 않고정상적으로구동된다. 표 16 Tomcat JNDI 위의방법외에다음과같은방법을이용하여 JNDI 설정이가능하다. context.xml 파일에위의 ResourceLink 정보등록 웹어플리케이션의 web.xml 에아래정보추가 <resource-ref> <description>db Connection</description> <res-ref-name>jdbc/xxxxds</res-ref-name> <res-type>javax.sql.datasource</res-type> <res-auth>container</res-auth> </resource-ref>
2012-02-24 Apache & Tomcat 설치및연동이남규 27/34 4.7 Tomcat thread pool 셋팅 Tomcat thread pool server.xml 파일의 Executor element 주석해제한후, 다음과같이설정한다. <!--The connectors can use a shared executor, you can define one or more named thread pools--> <Executor name="tomcatthreadpool" nameprefix="catalina-exec-" maxthreads="150" minsparethreads="50" maxidletime="60000" /> tomcat 의 server.xml 설정부분에 http protocol 및 AJP/1.3 protocol 이두가지설정부분이있는데 stand alone 으로 tomcat 을사용하면 http protocol 설정부분에아래와같이 executor 추가한다. <Connector port="8080" executor="tomcatthreadpool" protocol="http/1.1" connectiontimeout="20000" redirectport="8443" /> Apache 와 tomcat 을연동하여 AJP/1.3 protocol 을사용한다면다음과같이추가한다. <Connector port="8009" executor="tomcatthreadpool" protocol="ajp/1.3" redirectport="8443" /> 표 17 Tomcat thread pool Executor element 요소의속성값에대한설명은다음과같다. nameprefix: Thread 각각의접두사이며, 이름이다. (nameprefix + threadnumber와같이조합 ) maxthreads: 최대수용할수있는 Thread 개수며, default는 200이다. minsparethreads: 언제나살아있는 Thread의최소개수며, default는 25이다. maxidletime: Idle thread가살아있는시갂 (ms) 이며, default는 60000(1분 ) 이다. 4.8 Catalina.sh 홖경변수추가및 catalina.out 로그일자별분리 Catalina.sh 파일에아래의코드를추가해준다. 왼쪽 ( 수정전 ) 오른쪽 ( 수정후 ) : WinMerge 프로그램사용 JAVA_HOME=/usr/java/jdk1.6.0_21 export JAVA_HOME JAVA_OPTS="-D$SERVER_NAME -Xms1024m -Xmx1024m -XX:MaxPermSize=512m" JAVA_OPTS="${JAVA_OPTS} -XX:+PrintGCDetails -XX:+PrintGCTimeStamps " JAVA_OPTS="${JAVA_OPTS} -verbose:gc -Xloggc:../gclogs/"$SERVER_NAME"_gc.log -
2012-02-24 Apache & Tomcat 설치및연동이남규 28/34 XX:+HeapDumpOnOutOfMemoryError" JAVA_OPTS="${JAVA_OPTS} -Dfile.encoding=EUC-KR" export JAVA_OPTS PATH="$JAVA_HOME/bin:$PATH" export PATH CATALINA_HOME="/app/service/test/was/tomcat6029" export CATALINA_HOME #LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app/service/test/was/tomcat6029/lib #export LD_LIBRARY_PATH 표 18 catalina.sh 홖경변수추가 Catalina.log 을일자별로분리하기위해서는다음과같이변경하다. [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." ; pwd` prefix=`date +%Y%m%d%H%M` CATALINA_OUT=$CATALINA_HOME/logs/$SERVER_NAME.out CATALINA_OUT_BAK=$CATALINA_HOME/logs/backup/$SERVER_NAME.out_$prefix mv $CATALINA_OUT $CATALINA_OUT_BAK "$_RUNJAVA" $JAVA_OPTS "$LOGGING_CONFIG" $CATALINA_OPTS \ prefix=`date +%Y%m%d%H%M` GC_LOG=$CATALINA_HOME/gclogs/${SERVER_NAME}_gc.log GC_LOG_BAK=$CATALINA_HOME/gclogs/backup/${SERVER_NAME}_gc.log_$prefix mv $GC_LOG $GC_LOG_BAK if [ $? -eq 1 ]; then
2012-02-24 Apache & Tomcat 설치및연동이남규 29/34 if [ $? -eq 1 ]; then if [ $? -eq 1 ]; then 표 19 catalina.log 일자별분리 4.9 Tomcat Instance 생성 TOMCAT_HOME/bin 디렉토리에다음과같이 star, stop shell 스크립트를생성한다. #!/bin/sh StartTestDevSvr.sh # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/license-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ----------------------------------------------------------------------------- # Start Script for the CATALINA Server # # $Id: startup.sh 562770 2007-08-04 22:13:58Z markt $ # ----------------------------------------------------------------------------- SERVER_NAME=testDevSvr CATALINA_BASE=/app/service/test/was/tomcat6029/testDevSvr export SERVER_NAME CATALINA_BASE # Better OS/400 detection: see Bugzilla 31132 os400=false darwin=false case "`uname`" in CYGWIN*) cygwin=true;; OS400*) os400=true;; Darwin*) darwin=true;;
2012-02-24 Apache & Tomcat 설치및연동이남규 30/34 esac # resolve links - $0 may be a softlink PRG="$0" while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`/"$link" fi done PRGDIR=`dirname "$PRG"` EXECUTABLE=catalina.sh # Check that target executable exists if $os400; then # -x will Only work on the os400 if the files are: # 1. owned by the user # 2. owned by the PRIMARY group of the user # this will not work if the user belongs in secondary groups eval else if [! -x "$PRGDIR"/"$EXECUTABLE" ]; then echo "Cannot find $PRGDIR/$EXECUTABLE" echo "This file is needed to run this program" exit 1 fi fi exec "$PRGDIR"/"$EXECUTABLE" start "$@" #!/bin/sh stoptestdevsvr.sh # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/license-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ----------------------------------------------------------------------------- # Stop script for the CATALINA Server # # $Id: shutdown.sh 562770 2007-08-04 22:13:58Z markt $ # ----------------------------------------------------------------------------- SERVER_NAME=testDevSvr CATALINA_BASE=/app/service/test/was/tomcat6029/testDevSvr export SERVER_NAME CATALINA_BASE # resolve links - $0 may be a softlink PRG="$0"
2012-02-24 Apache & Tomcat 설치및연동이남규 31/34 while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`/"$link" fi done PRGDIR=`dirname "$PRG"` EXECUTABLE=catalina.sh # Check that target executable exists if [! -x "$PRGDIR"/"$EXECUTABLE" ]; then echo "Cannot find $PRGDIR/$EXECUTABLE" echo "This file is needed to run this program" exit 1 fi exec "$PRGDIR"/"$EXECUTABLE" stop "$@" 표 20 Tomcat instance 생성스크립트 빨갂색으로강조된 CATALINA_BASE 의지정경로에다음과같이디렉토리를생성한다. conf, logs, work, temp 디렉토리를복사하여 testdevsvr 디렉토리에붙여넣기한다. 표 21 Tomcat instance 생성디렉토리구조 4.10 지시자 지시자 jvmroute 설명 JSESSIONID 쿠키값의맨끝부분에 jvmroute 이름이붙는다. ( 단순구 분자역할 ) ex> 6E343D454D2332FD.v1_devSvr
2012-02-24 Apache & Tomcat 설치및연동이남규 32/34 http 를 8080 포트를이용하여서비스하고있는상황에서 https 로들어왔 redirectport allowlinking 을때 8443 으로 redirect 하는기능 https://172.18.16.44:8080로접속하였을경우 8443 포트로 redirect true, false true로지정하면 symbolic link로되어있는디렉토리접근이가능하다. <Context path="/mgr" docbase="/app/test/service/test/adnp_man" antiresourcelocking="false" antijarlocking="false" privileged="true" allowlinking="true" /> 4.11 Hash DOS 공격대비 Hash Dos 공격은맋은 HTTP Request Parameter 를맊들어서버 CPU 에부하를준다. 약 2MB 정도의 POST HTTP Request 한번이면 i7 core 서버를약 2 분갂 CPU 100% 로맊든다. [ 방안 ] tomcat 파라미터개수제한 tomcat 5.5.35, 6.0.35, 7.0.23 에서만지원 ( 옵션을사용하지않았을때 default 값은 10,000) <Connector port="8009" protocol="ajp/1.3" maxparametercount="xxx"./> 5 Windows Apache & Tomcat 연동 Windows 에서의 Apache + Tomcat 연동에대해서기술한다. 5.1 Apache 설치 1 윈도우용아파치를다운로드받는다. http://httpd.apache.org/download.cgi 2 다운로드받는 installer 파일을실행하여설치짂행 3 Server information 창에서는다음과같이서버정보를입력해야다음페이지로이동할수있 다.
2012-02-24 Apache & Tomcat 설치및연동이남규 33/34 4 설치완료 5.2 Tomcat 설치 Tomcat 설치는 http://tomcat.apache.org/download-60.cgi 에서다운로드받아짂행한다. 5.3 Tomcat Connector 다운로드 http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.30/ 페이지에서 apache 버젂과호홖되는 mod_jk.so 파일다운로드 apache 2.2 설치를했다면 mod_jk-1.2.30-httpd-2.2.3.so 를다운로드하면된다. 다운로드완료후 APACHE_HOME/modules 디렉토리경로에파일을옮긴다. 5.4 Apache & Tomcat 연동 APACHE_HOME/conf 디렉토리에 workers.properties 파일생성 worker.worker1.port 는 tomcat server.xml 의 AJP/1.3 protocol port 번호와일치시킨다. worker.list=worker1 worker.worker1.port=8009 worker.worker1.host=localhost worker.worker1.type=ajp13 APACHE_HOME/conf 디렉토리에 mod_jk.conf 파일생성 LoadModule jk_module <IfModule mod_jk.c> JkWorkersFile JkLogFile JkLogLevel JkLogStampFormat JkRequestLogFormat </IfModule> modules/mod_jk.so conf/workers.properties logs/mod_jk.log info "[%a %b %d %H:%M:%S %Y]" "%w %V %T"
2012-02-24 Apache & Tomcat 설치및연동이남규 34/34 httpd.conf 파일에다음의코드삽입 Include conf/mod_jk.conf NameVirtualHost *:80 <VirtualHost *:80> ServerName localhost DocumentRoot C:\Apache2.2\htdocs\test JkMount /*.do worker1 JkMount /*.jsp worker1 </VirtualHost> * tomcat server에적재되어있는 application이 context-path별로분리가되어있다면 DocumentRoot 디렉토리하위에 context-path 이름별로디렉토리를생성해줘야한다. Context path="/study1" study1 디렉토리를 DocumentRoot하위에생성 Context path="/study2" study2 디렉토리를 DocumentRoot하위에생성생성하지않으면 web.xml 파일에정의되어있는 welcome-file을호출하지못한다.