'WEB'에 해당되는 글 66건
- 2011.09.28 Apache2와 Tomcat6 연동하기 2
Apache2와 Tomcat6 연동하기
php와 jsp를 같이 쓰기 위해서는 apache2.2와 Tomcat6을 연동해야 한다.
순서는 아래와 같다.
1. apache2.2의 vhost 설정.
2. tomcat6 설치
3. Tomcat Connectors 설치
4. apache2.2와 tomcat6 의 연동
1. 우선 연동하기전에 apache의 vhost설정부터 한다.
httpd.conf에서 vhost관련 설정의 주석을 푼다.
]# vi httpd.conf
...
Include conf/extra/httpd-vhosts.conf
...
나는 도메인별로 vhost를 사용한다.
aaa.apollo89.com bbb.apollo89.com 등..
설정해보면
]# vi conf/extra/httpd-vhosts.conf
...
<VirtualHost *:80>
ServerAdmin apollo8900@naver.com
DocumentRoot "/home/aaa"
ServerName aaa.apollo89.com
ServerAlias aaa.apollo89.com
ErrorLog "logs/aaa.apollo89.com-error_log"
CustomLog "logs/aaa.apollo89.com-access_log" common
<Directory />
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin apollo8900@naver.com
DocumentRoot "/home/bbb"
ServerName bbb.apollo89.com
ServerAlias bbb.apollo89.com
ErrorLog "logs/bbb.apollo89.com-error_log"
CustomLog "logs/bbb.apollo89.com-access_log" common
<Directory />
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
..
이렇게 해주면된다.
그러면 /home/aaa 가 DocumentRoot 가 된다.
/home/aaa/index.html 와 /home/bbb/index.html 을 만들어주고
설정확인을 한다.
]# ./bin/apachectl -t
Syntax OK
그리고 정상이라면 restart~
]# ./bin/apachectl restart
aaa.apollo89.com 과 bbb.apollo89.com이 정상적으로 뜨는지 확인한다.
잘되는 것을 확인하고 본격적으로 apache2.2와 tomcat6.0의 연동을 해보자.
2. tomcat6를 다운받고 압축을 풀고 옮긴다.
]# wget http://mirror.korea.ac.kr/apache/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz (새 창으로 열기)
]# tar xvzf apache-tomcat-6.0.18.tar.gz
]# mv apache-tomcat-6.0.18.tar.gz /usr/local/tomcat6
3. Tomcat Connectors 를 받는다.
]# wget http://mirror.korea.ac.kr/apache/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.28/i586/mod_jk-1.2.28-httpd-2.2.X.so (새 창으로 열기)
]# mv mod_jk-1.2.28-httpd-2.2.X.so /usr/local/apache2/modules/mod_jk.so
4. apache2.2와 tomcat6 의 연동을 위해 설정한다.
]# vi httpd.conf
LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
JkWorkersFile /usr/local/apache2/conf/workers.properties
JkShmFile /usr/local/apache2/logs/mod_jk.shm
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
</ifModule>
그리고 vhost 설정한 쪽에 JkMount를 해 준다.
]# vi conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin apollo8900@naver.com
DocumentRoot "/home/bbb"
ServerName bbb.apollo89.com
ServerAlias bbb.apollo89.com
ErrorLog "logs/bbb.apollo89.com-error_log"
CustomLog "logs/bbb.apollo89.com-access_log" common
JkMount /*.jsp worker1
<Directory />
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
그리고 apache의 conf에 workers.properties 파일을 생성한다.
]# vi conf/workers.properties
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=bbb.apollo89.com
worker.worker1.port=8009
worker.worker1.lbfactor=1
worker.worker1.connection_pool_timeout=600
worker.worker1.socket_keepalive=1
아싸 다됬다 하면서
tomcat을 구동시키는데...
이게 웬 에러..OTL
정보: Starting Servlet Engine: Apache Tomcat/6.0.18
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.SecurityException: Servlet of class org.apache.catalina.servlets.InvokerServlet is privileged and cannot be loaded by this web application
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1145)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
... 6 more
이딴 에러가 나는것이다..
또 열심히 구글링 해보니..
톰캣 6.x 버전부터 org.apache.catalina.servlets.InvokerServlet가 독점 클래스로 바뀌었기 때문이라고 한다.
tomcat의 conf 안의 context.xml 파일을 수정하면 해결이 된다고 한다..
<Context> 를
<Context privileged="true" reloadable="true"> 으로 변경하니..
정상적으로 올라왔다..
그리고 떨리는 마음으로 http://bbb.apollo89.com/index.jsp (새 창으로 열기) 의 jsp코드를 넣고 열어보니 아주 잘 뜬다!!!
그리고 index.html에 php 코드를 넣어서 구동을 해보니 아주 잘된다^^
P.S 참고로 당연한 이야기지만 한 파일에 php, jsp 코드를 같이 넣으면 동작하지 않는다ㅋ
방화벽 정책 8009 포트 allow
workers.properties 파일 수정
worker.worker1.host=123.123.123.123 // hosts 파일 확인