지난번에 CentOS5.2 + apache2.2.11 + php5.2.9 + Zend3.3.3 + Mysql5.0.45 설치 했었다..
이제 정말 내가 하고싶었던…(그래서서버의 OS 재설치까지했던..)
php와 jsp를 같이 쓰기 위해서는 apache2.2와 Tomcat6을 연동해야 한다.
순서는 아래와 같다.
1. apache2.2의 vhost 설정.
2. tomcat6 설치
3. Tomcat Connectors 설치
4. apache2.2와 tomcat6 의 연동
1. 우선 연동하기전에 apache의 vhost설정부터 한다.
httpd.conf에서 vhost관련 설정의 주석을 푼다.
1 2 3 4 |
]# vi httpd.conf ... Include conf/extra/httpd-vhosts.conf ... |
나는 도메인별로 vhost를 사용한다.
aaa.apollo89.com bbb.apollo89.com 등..
설정해보면
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
]# vi conf/extra/httpd-vhosts.conf ... <VirtualHost *:80> ServerAdmin email@address.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 email@address.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 을 만들어주고
설정확인을 한다.
1 2 |
]# ./bin/apachectl -t Syntax OK |
그리고 정상이라면 restart~
1 |
]# ./bin/apachectl restart |
aaa.apollo89.com 과 bbb.apollo89.com이 정상적으로 뜨는지 확인한다.
잘되는 것을 확인하고 본격적으로 apache2.2와 tomcat6.0의 연동을 해보자.
2. tomcat6를 다운받고 압축을 풀고 옮긴다.
1 2 3 |
]# 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 를 받는다.
1 2 |
]# 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 의 연동을 위해 설정한다.
1 2 3 4 5 6 7 8 9 10 |
]# 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를 해 준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
]# vi conf/extra/httpd-vhosts.conf ... <VirtualHost *:80> ServerAdmin email@address.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 파일을 생성한다.
1 2 3 4 5 6 7 8 |
]# 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
정보: 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 코드를 같이 넣으면 동작하지 않는다ㅋ