원본글 바로가기


tomcat6를 처음 설치하면(압축풀면)  webapps 폴더 안에 웹페이지에서 디플로이를 관리할 수 있는

host-manager, manager 등이 디폴트로 설치되어 있다. 하지만 이것은 보안적인 측면에서 위배되므로

보통 다 지우는 게 좋다.

하지만 이것을 그냥 지우게 되면

Error Message

심각: Error starting static Resources
java.lang.IllegalArgumentException: Document base /home/msp_solution/web/tomcat/webapps/host-manager does not exist or is not a readable directory

이와 같은 에러를 만나게 된다.

Solution

conf\Catalina\localhost 밑에 context명.xml으로 생성하면, tomcat은 \webapps\context를 docBase 경로로 판단하고 찾는다. 그래서 서버 구동시 위와 같은 에러를 발생시킨다.
아래 xml들을 찾아서 삭제해주면 에러는 발생하지 않는다.

conf\Catalina\localhost\host-manager.xml
conf\Catalina\localhost\manager.xml

Posted by 서오석
,

가끔 서버에 파일을 업로드하거나 다운로드 할 때 해당 파일의 용량이 얼마나 되는지 알아야 할 때가 있다. 이런 때 아파치 로그로 I/O가 된 Byte를 표기해야 하는데 아래와 같은 설정을 하면된다.
( 새로 Apache를 설치하는게 아니라 동작하고 있는 녀석에 모듈을 추가하는 것이다. )

우선 내가 작업한 환경은 apache-2.0.63 이다.

우선 http://httpd.apache.org/download.cgi 여기서 아파치를 다운 받는다.
다운로드 (http://mirror.apache-kr.org/httpd/httpd-2.0.63.tar.gz)

서버에서 작업 중이라면

/]wget http://mirror.apache-kr.org/httpd/httpd-2.0.63.tar.gz 

이렇게 명령어를 하면 파일이 다운받아진다.

그리고 다운받은 녀석의 압축을 푼다.

/]tar xvf httpd-2.0.63tar.gz

하면 압축이 줄줄 풀린다. 

그리고 logio.c가 있는지 확인하기 위해 디렉토리 이동을 한다.
/]cd /httpd-2.0.63/modules/loggers

그 안에 mod_logio.c가 있는지 확인이 되었으면 다시 /]로 돌아가서 configure 파일을 만든다.

/]./configure --enable-mods-shared=logio --prefix=/apache

이러면 checking 하면서 설정할 파일들이 제대로 있는지 확인하고나서 configure 파일을 만들게 된다.

그리고 예전에 make 파일을 지우기위해 다음과 같은 명령어를 쓴다.

/]make clean

그럼 예전에 make 파일 만든게 몽땅 삭제된다.

그리고 나서 logio만 make하기 위해 modules/loggers 밑으로 이동한다.

/]cd modules/loggers

그다음 make 명령어로 make 파일을 만든다.
modules/loggers] make
/httpd-2.0.63/srclib/apr/libtool --silent --mode=compile gcc  -g -O2 -pthread    -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -DAP_HAVE_DESIGNATED_INITIALIZER   -I/httpd-2.0.63/srclib/apr/include -I/httpd-2.0.63/srclib/apr-util/include -I. -I/httpd-2.0.63/os/unix -I/httpd-2.0.63/server/mpm/prefork -I/httpd-2.0.63/modules/http -I/httpd-2.0.63/modules/filters -I/httpd-2.0.63/modules/proxy -I/httpd-2.0.63/include -I/httpd-2.0.63/modules/generators -I/httpd-2.0.63/modules/dav/main -prefer-non-pic -static -c mod_log_config.c && touch mod_log_config.lo
/httpd-2.0.63/srclib/apr/libtool --silent --mode=link gcc  -g -O2 -pthread    -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -DAP_HAVE_DESIGNATED_INITIALIZER   -I/httpd-2.0.63/srclib/apr/include -I/httpd-2.0.63/srclib/apr-util/include -I. -I/httpd-2.0.63/os/unix -I/httpd-2.0.63/server/mpm/prefork -I/httpd-2.0.63/modules/http -I/httpd-2.0.63/modules/filters -I/httpd-2.0.63/modules/proxy -I/httpd-2.0.63/include -I/httpd-2.0.63/modules/generators -I/httpd-2.0.63/modules/dav/main -module -export-dynamic    -o mod_log_config.la mod_log_config.lo
make[1]: Leaving directory `/httpd-2.0.63/modules/loggers'

이러면 apache의 modules아래 mod_logio.so 라는 파일이 만들어졌을 것이다.

그럼 이제 apache/conf 에 가서 로그 설정만 해주면 된다.

apache/conf]vi httpd.conf

맨 아래에 LoadModule logio_module modules/mod_logio.so 요걸 추가해준다.

이거 추가하면 아파치가 이 모듈을 로딩한다는 것이다. 그리고 로그 포멧 중 맨 마지막 combined 라고 된 녀석에 뒤에

%I %O를 추가해주면 된다.

LogFormat "%h %D %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combined

그리고 저장하구 나와서

apache/bin]./httpd -t

해서 문법이 맞는지 확인 한다.
Syntax OK 이렇게 나오면 잘 한 것이다.

이제 아파치 설정을 적용한다.

apache/bin] ./apachectl graceful

끝~ 이제 access 로그 뒷 쪽에 보면 해당 I/O 값들이 붙어서 날아 올 것 이다.





Posted by 서오석
,
내가 top 명령어로 서버 부하를 모니터링하고 있는 것을 본 창국님이 jconsol이란 녀석으로 모니터링 하라고 해서 하는 방법을 알려주셨다.

jconsol은 Tomcat의 메모리나 cpu 사용량 같은 것들을 모니터링하기 위한 툴이다.

실행법은 다음과 같다.

환경은 java jdk1.5나 jdk1.6 버전이어야 한다. (사실 그 이하 버전에 있는지는 잘 모르겠다. 1.5 버전과 1.6버전에 있는 건 확인했다.

그리고 모니터링 할 tomcat에 설정 상에 -Dcom.sun.management.jmxremote.port=8999
라는 녀석이 있어야 한다. 저건 8999번 포트에 jconsole로 모니터링 할 수 있도록 지원하겠다는 의미다. (Tomcat 기본 설정에 들어가 있지 않기 때문에 추가해주어야 한다. )
없다면 톰켓 환경 설정에서 argment에 추가해주고 톰켓을 실행시키자.


위에 이미지처럼 자신이 Java를 깐 폴더 및에 bin 폴더로 가서 jconsole 라는 녀석을 실행시키자.

그럼 프로그램이 실행되는데 java1.6버전 안에 들어있는 녀석은 다음과 같다.

원래 뒤에 있는건 이미 내가 지정한 녀석이라 모니터링이 되고 있는 것이다.

저기 Remote Process에다가 Tomcat이 올라간 서버명과 아까 인수로 지정한 포트를 써준다.

ex) 192.168.19.231이란 서버에 Tomcat이 올라갔을 경우 저기에 192.168.19.231:8999 이라고 써준다.
만약에 서버에 접근 할 때 PW가 있다면 아래다가 로그인 할 username하고 password를 적어준다. 없으면 안써도 된다.

그리고 Connect를 누르면 해당 톰켓을 모니터링 할 수 있게 된다.

완소 프로그램이다..ㅋ

좀더 자세한 내용을 알고 싶으면

여기로 한번 가보는 것도 좋다.




좀더 자세하게 설정을 해보자.

1) java가 있는 디렉토리 밑에가서 아래 커맨드를 날리자
> cd jre/lib/management
2) password 파일 복사
> cp jmxremote.password.template jmxremote.password
3) 파일 하단에 이거 주석 제거  #monitorRole  QED #controlRole 
> vi jmxremote.password
> 주석 제거 후 w! (읽기전용파일이라 저렇게 하고 나서 q!로 나간다.)
4) 권한 변경  
> chmod 444 jmxremote.password
5) 톰켓 start는 부분에 java_Option으로 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
이부분 추가 하면 세팅 끝~!




이거 하려다 에러가 난다면?
Posted by 서오석
,

아파치 2.0에선 Trace를 막는 건 쉬운데 사실 HEAD나 OPTIONS를 막는게 어떻게 하는지 몰라서

개삽질을 하다가 찾아냈다.

뭐 대략 서버에 다 막아버리는 방법은 다음과 같다.

DocumentRoot "/data2/htdocs"

이게 내 서버의 루트 디렉토리다. 루트디렉토리 다 때려막기는 다음과 같다.

<Directory "/data2/htdocs">
   Options FollowSymLinks
   AllowOverride None
  <Limit GET POST>
        Order allow,deny
        Allow from all
  </Limit>
  <LimitExcept GET POST>
        Require valid-user
  </LimitExcept>
</Directory>


설명을 하자면 디렉토리를 설정한 후

대략 GET POST를 제외한 모든 녀석은 막아버리고
만약 그 외 OPTIONS나 HEAD 등을 사용하려면 Valid-user만 가능하다는 뜻인데..
가디언 TFT 최세환님이 말해주셨는데... 젝일 까먹었다..T.T
Posted by 서오석
,

아파치웹서버를 동작시킨 후에 관리자는 서버의 부하를 어느정도 받고 있는지 모니터링을 해야한다. 부하가 많고 응답속도가 현저하게 떨어졌을 때에는 적절한 조치를 취해야하며, 데몬은 떠있지만 제대로 응답하지 않는 경우도 있기 때문에 항상 모니터링을 해야한다. 아파치웹서버의 모니터링은 유닉스의 쉘상태에서도 할 수 있으며, 웹으로도 할 수 있다.

일단 이런 모니터링을 가능하게 하려면 httpd.conf파일에 다음과 같이 설정을 해야한다.

 

[아파치 모니터링을 위하여 httpd.conf의 설정] : 특정 IP주소자만 허용

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 192.168.0.203
</Location>

위의 예와 같이 아파치 모니터링을 위해서는 httpd.conf 파일내에 server-status 설정이 되어 있어야 한다. 위의 설정에서 Order deny, allow 와 Deny from all 그리고 Allow from 192.168.0.203 설정으로 인하여 이 모니터링페이지를 웹브라우저로 확인가능한 곳은 192.168.0.203 IP 사용자만 가능하다. 당연히 192.168.0.203 사용자는 아파치웹서버의 관리자일 것이다.

만약 특정 IP 주소가 아닌 네트워크로 지정하고자 한다면 다음과 같이 하면 된다.

 

[아파치 모니터링을 위하여 httpd.conf의 설정] : 특정 네트워크 사용자 모드 허용

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 192.168.0.0/24
</Location>

즉, 192.168.0.0번 IP 사용자부터 192.168.0.255 사용자까지만 모니터링페이지를 로딩할 수 있다는 의미이다. 위의 설정은 관리자에 소속된 사용자들만 접속을 허용하기 위한 설정이라고 생각하면 된다.

 

이제 서버모니터링을 웹브라우저로 해보자. 먼저 아파치를 재시작시켜야 한다.

http://192.168.0.201/server-status

또한 주기적인 갱신으로 계속적인 모니터링을 하려면 다음과 같이 refresh 주기를 주면 된다. 단위는 초이다.

http://192.168.0.201/server-status?refresh=5

 

 

이 부분에 대한 대략적인 설명은 다음과 같다.

 

  -   Server Version : 아파치서버의 버전을 나타낸다. 

  -   Server Built : 아파치서버가 설치된 년, 월, 일, 시

  -   Current Time : 현재 모니터링하는 년, 월, 일, 요일, 시간

  -   Restart Time : 아파치서버가 재동작한 년, 월, 일, 요일, 시간

  -   Parent Server Generation : 서버 부하방지을 위한 아파치서버 생성갯수 총서버 개수중 요구에 응하고 있는 서버의 개수와 놀고 있는 서버의 개수 Scoreboard Key 에 대한 정보  

  -   "-" : 응답을 하기 위해 대기중임을 나타냄.

  -   "S" : 시작되고 있음을 나타냄.

  -   "R" : 응답을 위해 요구사항을 해석하고 있음.

  -   "L" : 요구에 대한 응답을 하고 있음.

  -   "K" : 계속연결중임.

  -   "D" : DNS서버에 요구도메인 검색중임.

  -   PID key : 프로세스정보를 보여준다.

Posted by 서오석
,


위 파일을 다운받아 리눅스 서버에 갖다 놓는다.

tar xvzf cronolog-1.6.2.tar.gz 로 압축을 푼다

명령어는 다음과 같다

./configure
make && make install

설치 완료!
/usr/local/sbin/ 에 설치되어 있음을 확인.

httpd.conf 를 수정

vi /usr/local/apache/conf/httpd.conf

기존

CustomLog logs/access_log combined

이걸 이렇게 변경

CustomLog "|/usr/local/sbin/cronolog /data2/server/apache/logs/info.daum.net.access_log.%Y.%m.%d" common

이 설정은 info.daum.net.access_log 파일을

info.daum.net.access_log.20060322
info.daum.net.access_log.20060323

이런 식으로 일자별로 분할해 주는 옵션이다.

그리고 마지막으로 /bin/apachectl restart

끝~!
Posted by 서오석
,

이번 회사소개 만들면서 버츄얼 호스트때문에 머리 깨지는 줄 알았다.

2일을 그냥 날려먹었다..--;;

recruit.daum.net 도메인을 받았는데 아파치 설정에 rewrite할 줄 몰라 너무 애먹었다.

물론 이번 공채 지원하는 사람들이 이것 때문에 불편했을거다..

아파치 설정에서 httpd.conf를 연 다음에 대략 중간에 다음과 같이 쓰면 된다.

 RewriteEngine On      
   RewriteCond %{HTTP_HOST} ^recruit\.daum\.net$ 
        이건 Rewrite Condition이다 만약  %{HTTP_HOST}가 recruit.daum.net이라면
        True로 반환해서 아래의 RewriteRule을 진행하게 된다.

   RewriteRule ^/$ http://recruit.daum.net/Daum/recruit/currentOpportunities.do [L]
        URL창에 들어온 URL 뒷부분이 그냥 / 이면
        http://recruit.daum.net/Daum/recruit/currentOpportunities.do를 수행한다.
        뒤에 붙은 [L]은 수행후 RewriteRule을 종료하란 것이다.
        그러니까 저 currentOpportunities.do를 날려준 후에 위의 컨디션에 대한 RewriteRule을
        종료시키는 것이다.

   RewriteCond %{HTTP_HOST} ^ir\.daum\.net$
       다시 컨디션을 체크하고..
   RewriteRule ^/$ http://ir.daum.net/Daum/ir/stockInformation.do [L]
       다시 Rewrite를 수행 후 Rule 종료.
뭐 대략 이렇다.
 

원본 소스를 긁어다 대충 약간 붙여야겠다.

httpd.conf의 일부



Posted by 서오석
,