반응형

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 초보의 가상호스트 설정이었습니다!!
반응형
반응형

(편의상 폴더와 디렉토리를 섞어 쓰겠습니다;;)

간편한 무료 FTP 서버인 FileZilla FTP server를 사용하고 있습니다.
4개의 계정에 각 다른 4개의 홈디렉토리를 설정해서 사용하고 있었습니다.

그런데 어쩌다보니 네 계정에 모두 공유하고 싶은 디렉토리가 생겼습니다.
어떻게 하면 좋을까요?? 홈디렉토리가 최상위 디렉토리라 홈 디렉토리 보다 상위에 있거나 홈디렉토리 밖에 있는 디렉토리로 접근할 수가 없군요ㅠㅠ

물론 평소에 FTP 서버를 운영하시던 분이라면 문제거리도 아니겠지만 그 외의 분들에게는 엄청난 고민거리죠^^
저도 사실 어떻게 해야할지 고민했으니깐요.
속편하게 생각해서 바로가기를 만들어주면 어떨까? 생각해봤지만 FTP에서는 바로가기 조차도 하나의 파일일 뿐이죠^^

어떻게 할까요???
해결 방법은 alias입니다.
컴퓨터 공부를 하다 보면 여러 영역에서  alias라는 말을 듣게 됩니다.
말그대로 어떤 대상이나 위치에 대해서 별명을 붙여주는 기능입니다.

대부분의 FTP 서버 프로그램에는 alias를 설정할 수 있습니다.
이 alias를 통해서 만들어진 링크가 디렉토리를 마치 홈디렉토리 안에 있는 것 처럼 해줍니다.


FileZilla Server Interface를 실행해서 한 번 설정해 볼까요?
메뉴의 [Edit] - [Users]로 가봅시다.



Users 창에서 왼쪽에 Shared folders를 클릭합니다. 그리면 공유된 디렉토리와 user의 권한이 나타납니다.
지금은 bi4라는 계정에 대해 '보건의료정보'라는 디렉토리 하나만 홈디렉토리(H로 표시된 부분)로 지정되어 있군요.


[Add]를 눌러서 공유할 디렉토리를 추가합니다.
 홈디렉토리보다 상위에 존재하는 'TED'라는 디렉토리를 추가했습니다.


이 상태 에서는 FTP client 프로그램을 통해 접속해도 TED 디렉토리는 나타나지 않습니다.
TED 디렉토리에 대해 Alias를 추가해 줍니다. 해당 디렉토리에 마우스 오른쪽 버튼을 클릭하고 Edit aliases를 클릭합니다.
(또는 Aliases 부분을 더블클릭합니다.)



저는 alias를 홈 디렉토리 아래에 TED라는 이름으로 하기 위해 /TED 라고 해주었습니다.



이제 alias가 추가 되었습니다. 한번 확인해 볼까요?



분명히 FTP server 가 구동 중인 server의 local 탐색기에서 '보건의료정보'라는 폴더에는 'TED'라는 폴더가 존재 하지 않습니다.



하지만 FTP client를 통해 FTP server에 접속해 보니 'TED'라는 폴더가 보이는 군요.


이렇게 alias를 이용해서 다양한 위치에 있는 파일을 하나의 계정을 통해 공유할 수 있습니다.
FileZilla server 뿐만 아니라 다른 FTP 서버에도 설정 메뉴나 방법이 조금 다를 뿐 같은 원리를 이용해서 서비스할 수 있습니다.
이상입니다^^

반응형
반응형

  아래 글을 쓰기 위해 사용한 환경은 다음과 같습니다.
  - 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번 포트로 접속해도 귀여운 고양이 한마리가 웃고 있네요 ^^연동이 잘 되었군요!!


반응형
반응형

SQL injection, 악성 스크립트 등 서버를 공격하는 몇 가지 방법과 그 공격을 방어하는 프로그램 중 하나인 Web Knight에 대해 듣고 난 후 인간의 면역체계와 정말 유사하다는 생각이 들었다. 인간의 면역 체계는 외부에서 들어오는 물질에 대해 피아를 구분하는 기능이 중요하다.  그래서 면역 세포들은 피아 식별을 위해 유전자 재배열 과정을 거치고 흉선에서 선택되는 과정을 거친다. 그 후 외부의 물질을 만나면 체세포 돌연변이를 통해 그 물질과 결합하는 항체를 만들어 내거나 그 물질을 분해할 수 있는 효소나 세포를 활성화시켜 외부로부터의 침입을 방어한다. Web Knight 같은 프로그램 역시 외부에서 들어오는 패킷에 대해서 필터링 룰을 통해 피아를 식별하여 패킷의 통과와 차단 여부를 결정한다. 그리고 새로운 침입에 대해 면역세포가 체세포 돌연변이를 통해 면역 반응을 하는 것처럼 새로운 패턴의 서버 공격이 포착되면 새로운 필터링 룰을 통해 필터링할 수 있다. 물론 이런 비유가 끼워 맞추기 식의 비유일지도 모르지만 Web Knight가 오픈 소스인 것을 생각하면 같은 종이라도 각 개체가 다른 타입의 면역세포를(정확히 면역세포는 아니지만)가지고 있어서 어떤 개체는 특정 질병에 잘 걸리지만 특정 개체는 잘 걸리지 않는 점을 착안하여 개개인이 또는 단체가 가지고 있는 소스를 잘 통합 한다면 좀더 나은 필터링 룰을 제공할 수 있지 않을까 하는 생각이 든다. 물론 이것은 참여하는 모든 사람이 양심적인 경우 이지만 말이다.


반응형

+ Recent posts