본문 바로가기

System/Linux

apache + tomcat 연동하기

아파치를 설치하고 톰캣과 연동하려고 합니다.

연동해 보기 전에 아파치와 톰캣을 연동하는 이유는 뭘까?

  • 톰캣은 정적인 페이지를 로드하기에 아파치 보다 느린 처리속도를 보인다.
  • 톰캣은 설정할 수 있는 내용들이 아파치에 비해 부족하다.
  • 톰캣은 아파치보다 부하에 약하다.
  • 톰캣만으로는 서블릿/JSP밖에 서비스할 수 없다.
  • 톰캣과 아파치를 연동하여 부하분담이 가능하다.(다수의 톰캣 구성으로의 로드밸런싱의 의미가 아닌 톰캣만으로 처리가능한 static page를 apache에서 대신함으로써의 부하 분담)

개발할때는 톰캣하나로만 돌려서 상관없을 것 같고 실제 운영할 때는 아파치와 톰캣을 연동하는게 성능이나 퍼포먼스를 향상시켜줍니다.

이제 아파치 톰캣을 연동해 보겠습니다.



1. Apache + tomcat 설치하기.


root 권한에서..


Apache 설치는 

apt-get install apache2


※Apache를 설치하다가 다음과 같은 오류가 발생할 수 있어요.


apache2: Could not reliably determine the server's fully qualified domain name,

이런 경우는 /etc/apache2 안에 있는 httpd.conf 또는 apache2.conf 파일 안에 아래와 같이 써주면 됩니다.


ServerName localhost   


Tomcat 설치는

apt-get install tomcat7 tomcat7-admin


하시면 설치되겠죠 :)


tomcat7-admin은 요거 설치하면, application 관리 편하게 할 수 있어서 좋아요. 그래서 설치~ :)


설치하면... 끝나요. tomcat은 좀 있다가 더 건들기로 하구요.


일단 ubuntu에서 디폴트 설치하면, 


tomcat home은 /usr/share/tomcat7 이구요.

tomcat 설정은 /etc/tomcat7 이구요.

tomcat 로그는 /var/log/tomcat7 이구요.

tomcat root directory는 /var/lib/tomcat7 이구요. ㅋㅋㅋㅋ 


아 머야, 왜케 복잡시러.. 암튼 그래요. 



2. mod_jk 설치하기.


mod_jk는 아파치(apache)랑 고양이녀석(톰캣, tomcat)과 연동에 필요한 모듈인데요. 


웹에서 다운로드 할 필요 있나요.


그냥 apt 쓰죠.


apt-cache search mod_jk 하면...


root@b:/...# apt-cache search mod_jk

libapache2-mod-jk - Apache 2 connector for the Tomcat Java servlet engine


일케 나오네요.. 저거 설치하면 되요.

root 권한에서.

apt-get install libapache2-mod-jk 

하시면 설치 완료!!! 자동으로 /etc/apache2/mods-available에 들어가니깐요. 

우리가 할일은 값들 조금 바꿔주는 것 정도에요. 그럼 3번에서...


3. mod_jk setting


setting 할껀데요. conf 파일이 어디에 있느냐 하면요.


/etc/apache2/mods_available/ 폴더에 jk.conf 입니다.


그러니깐. vi /etc/apache2/mods_available/jk.conf 하시면 뙇! 


아.. 요 파일은 건드리지 않아도 되는군요........... :)


그래도 이왕 파일 열어봤으니깐... 


<IfModule jk_module>

   

    JkWorkersFile /etc/libapache2-mod-jk/workers.properties

    # 요 위에 파일을 셋팅해야 하나,,, 암튼 좀 따 위 파일은 가보도록 하구요.


    # Our JK error log

    # You can (and should) use rotatelogs here

    JkLogFile /var/log/apache2/mod_jk.log

    # 로그 파일 위치 변경하고자 하시면, 위 내용을 수정하시면 되겠죠?


    # Our JK log level (trace,debug,info,warn,error)

    JkLogLevel info

    # 로그에 어디까지 출력할꺼냥!!! 요거죠. 걍 디폴트로 info 까지고 두고 넘어가겠습니다.


    # Our JK shared memory file

    JkShmFile /var/log/apache2/jk-runtime-status

    # 음... 몰라요. 머지 메모리 관련된 것을 설정하는 건가...   

....

....

....


에이 괜히 들어왔죠? 죄송해요....

그냥 저기에 jk 설정하는 부분이 있다는 걸... 알려드리고자 해서 !! 제가 그런거....는 아닙니다. 


일단 4번으로 가시죠..



4. JkWorkersFile 수정..


위 3번에서 JkWorkersFile 위치를 확인 할 수 있었죠? 그럼 vi로 열어보면.



vi /etc/libapache2-mod-jk/workers.properties


# OPTIONS ( very important for jni mode ) 


#

# workers.tomcat_home should point to the location where you

# installed tomcat. This is where you have your conf, webapps and lib

# directories.

#

// 톰캣이 설치되어 있는 경로

workers.tomcat_home=/usr/share/tomcat7


#

# workers.java_home should point to your Java installation. Normally

# you should have a bin and lib directories beneath it.

#

// 자바가 설치되어 있는 경로

workers.java_home=/usr/lib/jvm/java-7-openjdk-amd64


#

# You should configure your environment slash... ps=\ on NT and / on UNIX

# and maybe something different elsewhere.

#

ps=/

...
....
....
....
#
# The workers that your plugins should create and work with
// 사용할 worker의 이름을 셋팅
// 아파치에 톰캣을 하나 이상 연결할 때는 worker.list=prj1,prj2 이런식으로 설정하면 된다.
// 그냥 기본 설정으로 셋팅
worker.list=ajp13_worker

// 각각의 worker list별로 설정.
// 여기서 포트는 톰캣에 설정되어 있는 ajp port를 적어준다.
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.ajp13_worker.lbfactor=1

위 빨간색으로 해둔 것이.. 제대로 설정이 안되어 있을 수도 있어요.
저는 수정한거구요. tomcat_home과 java_home을 잘 수정하시면 될 것 같네요.
그 담에 worker.list에 ajp13_worker는 디폴트인데요. 이거 기억해두세요.

apache 쪽에 가서 추가해야 하거든요.



5. tomcat .... server.xml 수정


요 파일은요.


/var/lib/tomcat7/conf/server.xml 인데요.


여기 열어서 아래 처럼 추가하세용.



  <Service name="Catalina">

  <Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               URIEncoding="UTF-8"

               redirectPort="8443" />


    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />



빨간색 라인만 추가하시면 됩니다.



6. 마지막 apache 셋팅 수정.


우리가 mod_jk 설치했는데, 왜 Fedora 같은데서는 잘만 LoadModule 하더니, 왜 안하냐고요?


apache2.conf 열어보시면요.


# Include module configuration:

Include mods-enabled/*.load

Include mods-enabled/*.conf


일케 되어있어요. 즉 아까 우리가 /etc/apache2/mods_available/jk.conf 파일 열었던 것을 불러온다는거죠 ㅎ

아.. 파일에는 mods_enabled/*.conf 라고 되어있는데, mods_available 이라니 무슨 헛소리냐구요?


mods_enabled 폴더가서 ls -al 해보세용. 링크되어 있습니다. 


암튼 잡소리 그만하고. apache2.conf 말구요. sites-available 폴더에 defaults 열어보세용.


vi /etc/apache2/sites-available/000-default


....

....

....

    DocumentRoot /var/lib/tomcat7/webapps/ROOT

....

....


    #JKMount /test/* ajp13_worker


</VirtualHost>


아파치 root에 하위 test 디렉토리의 모든 파일을 ajp13_worker로 연결해라!! 


ajp13_worker는 어디서 왔냐하면 4번을 다시 읽어보시면 되겠습니다. 


test라는 Java 애플리케이션이 존재해야겠죠? ㅎ 



7. Apache, Tomcat 재시작


세팅을 완료했다면 아파치와 톰캣을 재 시작 해야해요


service apache2 restart

cd /usr/share/tomcat7/bin

./shutdown.sh

./startup.sh


만약 아래와 같은 오류가 떴다면 

--------------------------------------------------------------------------------------------------------------------------------------------

/usr/share/tomcat7/bin$ sudo ./shutdown.sh

Using CATALINA_BASE:   /usr/share/tomcat7

Using CATALINA_HOME:   /usr/share/tomcat7

Using CATALINA_TMPDIR: /usr/share/tomcat7/temp

Using JRE_HOME:        /usr

Using CLASSPATH:       /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar

11월 26, 2015 10:50:09 오후 org.apache.catalina.startup.ClassLoaderFactory validateFile

경고: Problem with directory [/usr/share/tomcat7/common/classes], exists: [false], isDirectory: [false], canRead: [false]

11월 26, 2015 10:50:09 오후 org.apache.catalina.startup.ClassLoaderFactory validateFile

경고: Problem with directory [/usr/share/tomcat7/common], exists: [false], isDirectory: [false], canRead: [false]

11월 26, 2015 10:50:10 오후 org.apache.catalina.startup.ClassLoaderFactory validateFile

경고: Problem with directory [/usr/share/tomcat7/server/classes], exists: [false], isDirectory: [false], canRead: [false]

11월 26, 2015 10:50:10 오후 org.apache.catalina.startup.ClassLoaderFactory validateFile

경고: Problem with directory [/usr/share/tomcat7/server], exists: [false], isDirectory: [false], canRead: [false]

11월 26, 2015 10:50:10 오후 org.apache.catalina.startup.ClassLoaderFactory validateFile

경고: Problem with directory [/usr/share/tomcat7/shared/classes], exists: [false], isDirectory: [false], canRead: [false]

11월 26, 2015 10:50:10 오후 org.apache.catalina.startup.ClassLoaderFactory validateFile

경고: Problem with directory [/usr/share/tomcat7/shared], exists: [false], isDirectory: [false], canRead: [false]

11월 26, 2015 10:50:10 오후 org.apache.catalina.startup.Catalina stopServer

심각: Catalina.stop:

java.io.FileNotFoundException: /usr/share/tomcat7/conf/server.xml (그런 파일이나 디렉터리가 없습니다)

        at java.io.FileInputStream.open0(Native Method)

        at java.io.FileInputStream.open(FileInputStream.java:195)

        at java.io.FileInputStream.<init>(FileInputStream.java:138)

        at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:466)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:497)

        at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:370)

        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:457)

--------------------------------------------------------------------------------------------------------------------------------------------


이렇게 해결해요


/usr/share/tomcat7$ sudo ln -s /var/lib/tomcat7/* ./



브라우저 확인해보면


주소 입력창을 보면 8080 port가 빠져있다. 아파치 톰캣 연동 성공했어요.


물론 8080 port를 붙인 주소로도 접속이 가능해요. 


다음번에는 프로젝트 하나 다운받아서 톰캣에 올려보도록 할게요.



'System > Linux' 카테고리의 다른 글

패키지 삭제 방법  (0) 2015.11.30
vsftpd: 550 Permission denied.  (0) 2015.11.27
Ubuntu DNS 설정  (0) 2015.11.19
Ubuntu apt-get 명령어  (0) 2015.01.08
ubuntu static ip 설정후에도 resolv.conf가 초기화 되는문제  (0) 2014.11.20