반응형

Tomcat symbol

<

Apache httpd symbol



  예전에 포스팅했던 글에서 제가 웹서버의 성능을 향상 시키기 위해 아파치(Apache, httpd)톰캣(Tomcat)을 연동한다고 했었습니다. 그런데 열심히 항해를 하다가 그것이 불필요한 일이라는 것을 알아버렸네요.

출처를 먼저 밝히겠습니다.
Tomcat expert라는 커뮤니티입니다.

http://www.tomcatexpert.com/blog/2010/03/24/myth-or-truth-one-should-always-use-apache-httpd-front-apache-tomcat-improve-perform

내용을 제 나름대로 해석하고 요약해봤습니다.
정말 제 나름이니 정확한 내용을 보실분은 출처를 꼭 한번 따라가 보시길^^;;


Myth or truth : 사람들은 항상 성능을 향상시키기 위해 아파치 Tomcat 앞에 아파치 httpd 를 사용해야합니까?

간단히 말하면 그 것은 Myth이다. 좀 더 이야기하면 Tomcat 3 이전에는 상황에 따라 어느 정도 진실이었다. 하지만 요즘 사용하는 Tomcat (5.5.x 이후)은 순전히 성능상의 이유만으로 httpd (아파치) 를 사용할 필요가 없다. Tomcat은 현재 low-level I/O를 위해서 httpd와 같은 기본 라이브러리를 사용하여 httpd와 비슷한 기능을 수행할 수 있는 native/APR(Apache Portable Runtime) connector를 지원한다. Tomcat으로 정적인 컨텐츠를 제공할 경우 httpd에 비해 약간 부하가 더 있지만 그 차이는 눈에 띄지 않을 정도다.

종종 벤치마크에서 예상외로 httpd보다 Tomcat이 좋을 성능을 발휘했다. 이는 Tomcat은 기본적으로 메모리에 작은 정적 파일을 캐시하고 httpd는 기본적으로 메모리에 파일을 캐시하지 않기 때문이다.

최상을 성능을 달성하기 위한 설정은 다양하다. 이는 여러가지 요인에 크게 의존한다.

그외에 복 수의 Tomcat 인스턴스에 로드밸런싱을 위해 Apache를 사용한다. (로드밸런싱을 위한 유일한 옵션은 아니지만)

요약하면 Tomcat과 httpd를 합께 사용하면 좋은 이유들이 있지만 정적 페이지의 성능을 위한 이유는 그 중 하나가 아니다.


  원문에는 벤치마크에 대한 내용과 이런저런 connector 들에 대한 이야기가 나와 있습니다. 저는 그렇게까지 전문적인 내용은 필요가 없으므로 제가 이해할 만한 내용만 적어봤습니다.

  때로는 그저 그냥 당연하다고 생각한 것이 사실은 전혀 당연한게 아닐 수도 있군요.

반응형
반응형

저는 Apache 웹서버를 이용해서 웹서비스를 하고 있습니다.
아아 서비스가 아니라 실습정도요?^^

얼마전 저에게 한 가지 과제가 생겼습니다.
한 컴퓨터에서 두 개의 도메인 이름으로 각기 다른 페이지를 서비스 할 수 있게하라!!

예를 들면 kkosseul.domain.net ksk.domain.net 이 서로 다른 페이지로 연결되도록 하라는 것이었습니다.

IIS에서는 걍 도메인만 추가하면 알아서 되는 걸로 알고 있는데 Apache에서는 어떻게 해야할까요??

구글링도 해보고 네이버 아저씨한테 물어봐도 다양한 답이 있지만 핵심을 찝어 주신 분들이 없더라구요.
혼자 삽질에 삽질 삽질을 거듭한 끝에 꼭 필요한 몇가지만으로 가능하다는 걸 알았습니다.

의외로 간단했습니다.
우선 이 작업을 위해서 DNS 서버에 제 IP주소에 대해서 CNAME으로 별명을 하나더 지어 줬습니다.
그러니깐 제 호스트 명이 ksk06 이라면, CNAME이 kkoseul이 되는 것이죠.

nslookup을 통해 확인해보면 같은 IP주소인 것을 확인 할 수 있습니다.



Apache는 text 파일을 이용해서 여러가지 설정을합니다.
이 파일 들은 Apache를 설치한 디렉토리 아래 conf 라는 디렉토리 내에 있죠.
그 중 httpd.conf 라는 파일을 엽니다.

이 파일에 서 제일 앞에 #을 포함한 줄은 모두 주석입니다. 즉 Apache가 읽어서 처리하는 부분이 아니라는 것이죠.
Ctrl+F 를 이용해서 Virtual hosts를 찾아보시면 아마 다음과 같은 부분을 찾으실 수 있을겁니다.
아마 두번째 줄이 주석으로 처리되어 있을건데 #을 지워서 주석을 풀어줍니다.

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

주석을 풀면 Apache가 시작되면서 설정들을 읽을 때 conf/extra/httpd-vhosts.conf 파일을 함께 읽게 됩니다.
그럼 그 다음 순서는 무엇일까요?
당연히 Apache가 읽어들일 httpd-vhosts.conf 파일을 우리가 원하는 동작을 하도록 수정해줍니다.

Apache 설치 디렉토리에서 conf/extra/httpd-vhosts.conf 파일을 열어봅시다.
파일을 열어보면 Virtual Hosts에 대한 설명들이 주석으로 적혀 있습니다.
중요한 부분은 다음 부분들입니다.
NameVirtualHost 000.000.000.000:00

<VirtualHost kkoseul.domain.net>
    DocumentRoot "C:\Dev\Apache2.2\htdocs\kkoseul"
</VirtualHost>

<VirtualHost ksk.domain.net>
    DocumentRoot "C:\Dev\Apache2.2\htdocs\ksk"
</VirtualHost>

NameVirtualHost에 가상 호스트의 이름을 적어줍니다.
포트번호는 안적으셔도 되지만 80번 포트로 들어온 요청에만 답하기 위해 저는 적어줬습니다.

<VirtualHost host.domain.net> 태그에 호스트 명을 적어줍니다. 호스트 이름을 적는 것이 가장 중요합니다.!!
이 호스트 이름과 같은 이름으로 접속을 요청한 가상 호스트로 연결시켜 주니깐요!!

그리고 <VirtualHost>와</VirtualHost> 사이에 서비스할 문서의 DocumentRoot "루트경로"를 지정해 줍니다.

<VirtualHost>내부에 호스트 이름, 로그파일 위치, 관리자 이메일 등등 여러가지 정보를 넣을 수 있습니다.
하지만 가상호스트가 동작하는 것만을 보여 드리기 위해서 다 지웠습니다.

이런 동작이 가능한 것은 우리가 웹 브라우저의 주소창에 입력한 주소 정보가 서버에 도달하면 서버는 그 주소를 해석해서 해당 주소와 같은 가상 호스트에 연결 시켜주기 때문입니다.

그리고 위의 httpd-vhosts.conf 파일의 내용을 그대로 httpd.conf 파일에 적어줘도 무관합니다.
하지만 설정파일의 가독성을 위해서는 파일을 따로 두고 include 시키는 방법이 더 나을 것 같네요.

위처럼 설정하면 브라우저를 통해 하나의 Apache 서버에서 둘 이상의 서비스가 뜨는 것을 확일 할 수 있습니다.
제가 서로 다른 디렉토리에 간단한 html 파일을 넣어두었는데 제대로 나타나는군요
(주소 뒤의 도메인 부분은 동일합니다. domain.net 이런 식으로여)



원래 웹서버를 운영하시던 분이라면 상관없겠지만
혹시나 그닥 요청량이 높지 않은 두 개 이상의 웹을 서비스 하기 위해서 컴퓨터를 두대 사버리는 실수를 범하지 않으시길 ^^
이상 Apache 초보의 가상호스트 설정이었습니다!!
반응형
반응형

  아래 글을 쓰기 위해 사용한 환경은 다음과 같습니다.
  - MS Windows 7 ultimate 64bit
  - Apache 2.2.21
  - Apache Tomcat 6.0.35
  - mod_jk 1.2.31


  제가 예전에 공부했던 JSP(Java Server Page) 페이지를 좀 만들어보려고 톰캣(tomcat)을 설치했습니다.

  그런데 톰캣만 사용하기에는 일반적인 웹서버가 아니라서 80번 포트로 접속되는게 아니라 8080이나 사용자가 정의한 포트로 접속하는 거라서 약간의 불편함이 있지요. 아래 그림 처럼 말이죠.. 귀여운 고양이를 만나기 위해 8080포트를 꼭 명시해 줘야 합니다 ㅠ


  또 톰캣은 http 서버를 내장하지만 정적 페이지를 로딩하는데에 웹 서버보다 수행 속도가 느리기 때문에 아파치(apache) 같은 정적인 페이지를 로드하는데 사용하는 웹 서버와 연동해서 사용합니다.

  그래서 저도 아파치를 설치하고 톰캣과 연동해서 사용하기로 했습니다. 이렇게 하면 정적인 페이지는 아파치가 jsp 나 서블릿은 톰캣이 처리하게 되죠.

  본격적으로 아파치와 톰캣이 정상적으로 설치되었다는 가정하에 연동 방법에 대해 설명드리겠습니다.

  우선 http://mirror.apache-kr.org//tomcat/tomcat-connectors/jk/binaries/windows/ 에서 톰캣 커넥터를 다운로드 받습니다. 저는 윈도우의 아파치 웹서버 환경이라서 위 링크로 따라갔지만 다른 환경(IIS같은 다른 웹서버 또는 다른 운영체제)이라면 당연히 다른 경로와 파일을 선택해서 다운 받으셔야합니다. 

 



다운로드가 완료되면 파일 앞축을 풀고 mod_jk.so 파일아파치 설치 폴더 아래의 modules 폴더에 복사합니다.

아파치설치폴더\modules\



  그 다음은 아파치 설치 폴더 아래의 conf 폴더에 있는 설정 파일인 httpd.conf 파일을 조금 수정해줍니다. 찾아보시면 LoadModule로 시작하는 줄들이 죽~ 있는 것을 보실 수 있는데  거기에 다음 한 줄을 추가해 줍니다.

LoadModule jk_module modules/mod_jk.so

모듈을 로드하고 그 모듈의 so 파일이 있는 위치를 정해 준것이라 생각하시면 되겟네요.

다음은 마지막 즈음에 다음을 추가해 줍니다.

Include conf/mod_jk.conf

  jk_module에 대한 설정을 적은 파일을 httpd.conf에 포함시켜주는 것이죠. jk_module에 대한 설정 파일을 따로 만들기 싫으시면 그 파일의 내용을 위 한 줄 대신 써주시면 됩니다.

  저는 설정 파일을 따로 만들기로 했으니 위에 적은 경로인 아파치 설치 폴더 아래의 conf 폴더에 mod_jk.conf라는 파일을 만들겠습니다. 방금 말씀 드렸듯이 이 방법이 싫다면 아래 내용을 httpd.conf 파일에 직접 추가하시면 됩니다.

JkWorkersFile "F:/Apache2.2/conf/workers.properties"
JkLogFile "F:/Tomcat 6.0/logs/mod_jk.log"
JkLogLevel error
JkAutoAlias "F:/Tomcat 6.0/webapps"
JkMount /* ajp13
JkUnmount /*.php ajp13
<Directory "F:/Tomcat 6.0/webapps">
 Options Indexes FollowSymLinks
 allow from all
</Directory>

  그리고 다음은 상자 첫줄에 있는 workers.properties 파일을 작성해 줍니다.
  첫 줄에 톰캣이 설치된 경로, 둘째 줄에 자바가 설치된 경로입니다. 나머지 부분은 내공이 부족하여 설을 못드리겠습니다. ㅠㅠ
  이렇게 하면 된다는 것 까지밖에.. 어쩌면 불필요한 줄이 있을지도 모르겠군요. 고수님의 댓글 부탁드립니다.!!

workers.tomcat_home="F:/Tomcat 6.0"
workers.java_home="F:/Java/jdk1.6.0_30"
ps=/
 
worker.list=ajp12, ajp13
worker.ajp12.port=8007
worker.ajp12.host=localhost
worker.ajp12.type=ajp12
worker.ajp12.lbfactor=1
 
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
 
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=ajp12, ajp13
worker.inprocess.type=jni
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar
worker.inprocess.cmd_line=start
worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout
worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stder

  이렇게 모든 과정을 거치는 동안 느낀 것은 거의 모든 작업은 텍스트파일에 의해 이루어 진다는 것입니다. 사람이 이해하기 좋으면서 가장 단순한고 왜곡이나 압축 없이도 그 용량이 적은 것은 텍스트가 아닐까 생각되네요.

  아파치와 톰캣을 다시 시작한 후 결과는 다음과 같습니다.
  이제 80번 포트로 접속해도 귀여운 고양이 한마리가 웃고 있네요 ^^연동이 잘 되었군요!!


반응형

+ Recent posts