시스템 관리 및 실습 #12
1. APM 설치과정 정리
-------------------------------------------------------------------------
[설치환경]
-------------------------------------------------------------------------
[Latest version]
* 아파치 : httpd-2.0.44.tar.gz
* PHP : php-4.3.1.tar.gz
* MYSQL : mysql-4.0.12.tar.gz

[PC환경]
솔라리스 2.9 INTEL
-------------------------------------------------------------------------
1.[APM을 설치 하기전 선행적으로 설치 되어야 할 프로그램들 설치]
-------------------------------------------------------------------------
패키지 List(www.sunfreeware.com)
1.01 gzip-1.3.5-sol9-intel-local
1.02 gcc-3.2.2-sol9-intel-local.gz
1.03 make-3.80-sol9-intel-local.gz
1.04 flex-2.5.4a-sol9-intel-local.gz
1.05 bison-1.875-sol9-intel-local.gz
1.06 m4-1.4-sol9-intel-local.gz
1.07 autoconf-2.57-sol9-intel-local
1.08 automake-1.7.2-sol9-intel-local.gz
1.09 libgcc-3.2.2-sol9-intel-local.gz
1.10 zlib-1.1.4.tar.gz
1.11 gd-2.0.11.tar.gz
1.12 perl은 특별히 설치 하지 않았음
**************************************
[install Usage of PKG]
#gzip -d ./xxx-sol9-intel-local.gz
#pkgadd -d xxx-sol9-intel-local
[Install Usage of Source]
#gzip -cd ./xxx-tar.gz | gtar xvf -
#sh .configure
#gmake;gmake install
**************************************

----------------------------------------------------------------------------
2.[apache,php,Mysql 압축품]
----------------------------------------------------------------------------
/*
본인의 경우는 /temp/ 안에 APM을 다운 받았고 설치 순서는
MySQL --> APACHE --> PHP 로 했음
반드시 MySQL만큼은 gtar를 사용할것
*/
[/temp/]#gzip -cd ./httpd-2.0.44.tar.gz | gtar xvf -
[/temp/]#gzip -cd ./php-4.3.1.tar.gz | gtar xvf -
[/temp/]#gzip -cd ./mysql-4.0.12.tar.gz | gtar xvf -

----------------------------------------------------------------------------
3.[MySQL Configureation & Compile & Install
----------------------------------------------------------------------------
[/temp/mysql-4.0.12/]#./configure --help
[/temp/mysql-4.0.12/]#./configure --prefix=/usr/local/mysql \
> --localstatedir=/usr/local/mysql/data \
> --with-charset=euc_kr
[/temp/mysql-4.0.12/]#gmake;gmake install
[/temp/mysql-4.0.12/]#groupadd mysql
[/temp/mysql-4.0.12/]#useradd -g mysql mysql
[/temp/mysql-4.0.12/]#chown -R root /usr/local/mysql
[/temp/mysql-4.0.12/]#chown -R mysql /usr/local/mysql/data
[/temp/mysql-4.0.12/]#chown -R mysql /usr/local/mysql
[/usr/local/mysql/bin/]#mysqld_safe --user=mysql &
[/usr/local/mysql/bin/]#mysql

-----------------------------------------------------------------------------
4.자동 시작 스크립트 작성과 심볼릭 링크 생성
-----------------------------------------------------------------------------
[/etc/init.d/]#vi ./mysqld
case "$1" in
'start')
LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH
/usr/local/mysql/bin/mysqld_safe &
;;
'stop')
;;
*)
echo "Usage: $0 { start | stop |"
exit 1
;;
esac
exit 0
[/etc/init.d/]#ln -s /etc/init.d/mysqld /etc/rc2.d/S90mysql
[/etc/init.d/]#ln -s /etc/init.d/mysqld /etc/rc0.d/K10mysql

/*
reboot해서 확인 할것
*/
#ps -ef | grep mysqld

/*
root패스워드 변경
*/
[/usr/local/mysql/bin/]#mysqladmin -u root password '패스워드'
[/usr/local/mysql/bin/]#mysqladmin -u root -h host password '패스워드'

/*
접속 TEST
*/
[/usr/local/mysql/bin/]#./mysql -u root -p mysql
passwd : 패스워드 입력
or
[/usr/local/mysql/bin/]#./mysql -p mysql


-----------------------------------------------------------------------------
5.[APACHE COMPILE & INSTALL]
-----------------------------------------------------------------------------
/*
설치전 기존에 기본으로 설치 되어 있는 패키지 삭제
*/
#pkginfo | grep SUNWapch*
#pkgrm SUNWapchr
#pkgrm SUNWapchd
#pkgrm SUNWapchu
/*
환경설정
*/
[/temp/httpd-2.0.44/]#./configure \
> -- prefix=/usr/local/apache2 \
> -- enable-so \ <-- php연동시 필요
> -- enable-module=so \ <-- php여동시 필요
> -- enable-shared=max \
> -- enable-rule=SHARED_CORE \ <-- tomcast연동시 필요
> -- with-mpm=threadpool
[/temp/httpd-2.0.44/]#gmake;gmake install

-----------------------------------------------------------------------------
5.[PHP COMPILE & INSTALL]
-----------------------------------------------------------------------------
/*
php 환경 설정 및 컴파일,설치
*/

#CFLAGS="-L/usr/local/mysql/lib/mysql -lmysqlclient"
#./configure \
> --prefix=/usr/local/php \
> --with-apxs2=/usr/local/apache2/bin/apxs \
> --with-mysql=/usr/local/mysql \
> --disable-debug \
> --enable-track-vars=yes \
> --disable-debug \
> --with-expat \
> --with-xml \
> --enable-sockets \
> --with-language=korean \
> --with-charset=euc_kr \
> --enable-modules=so \
> --enable-trans-sid \
> --with-config-file-path=/usr/local/apache2/conf \
> --with-execdir=/usr/local/apache2/bin \
> --enable-versioning
#gmake;gmake install

/*
php.ini복사
*/
#cp /temp/php-4.3.1/php.ini-recommended /usr/local/apache/conf/php.ini
/*
php.ini수정
*/
default_charset = "euc_kr" 추가
register globals On 수정

-----------------------------------------------------------------------------
6.[CONFIGURATION] - ex) #vi /usr/local/apache2/conf/httpd.conf
-----------------------------------------------------------------------------
/*
error_log, access_log, referer_log(접속자기록),
agent_log(브라우저기록)생성
*/
#mkdir /var/log/httpd
#vi /usr/local/apache2/conf/httpd.conf

81 PidFile /var/run/httpd.pid
87 Timeout 60
218 Listen 아이피주소:80
232 LoadModule php4_module modules/libphp4.so
235 <Files *.php>
236 SetOutputFilter PHP
237 SetInputFilter PHP
238 </Files>

290 User nobody
291 Group nobody

300 ServerAdmin jackcom@casp.hanyang.ac.kr
314 ServerName casp.hanyang.ac.kr:80
323 UseCanonicalName On
330 DocumentRoot "/usr/local/apache2/htdocs"
355 <Directory "/usr/local/apache2/htdocs">
369 Options FollowSymLinks MultiViews Includes ExecCGI IncludesNOEXEC
390 UserDir public_html
391
392 #
393 # Control access to UserDir directories. The following is an example
394 # for a site where these directories are restricted to read-only.
395 #
396 <Directory /export/home/*/public_html>
397 AllowOverride FileInfo AuthConfig Limit
398 Options MultiViews SymLinksIfOwnerMatch Includes ExecCGI IncludesNOEXEC
399 <Limit GET POST OPTIONS PROPFIND>
400 Order allow,deny
401 Allow from all
402 </Limit>
403 <LimitExcept GET POST OPTIONS PROPFIND>
404 Order deny,allow
405 Deny from all
406 </LimitExcept>
407 </Directory>
417 DirectoryIndex index.html index.htm index.php index.jsp index.js index.phtml

497 ErrorLog /var/log/httpd/error_log
525 CustomLog /var/log/httpd/access_log common
531 CustomLog /var/log/httpd/referer_log referer
532 CustomLog /var/log/httpd/agent_log agent
548 ServerTokens Prod <--응답헤더정보를 가장적게 보여줌: Apache
558 ServerSignature On
731 DefaultLanguage ko
788 LanguagePriority ko en da nl et fr de el it ja no pl pt pt-br ltz ca es sv tw
807 AddDefaultCharset EUC_KR
859 AddType application/x-httpd-php .php4 .php3 .html .htm .phtml .ph .php
860 AddType application/x-httpd-php-source .phps883 AddHandler imap-file map
914 ErrorDocument 500 "The server made a boo boo."

#/usr/local/apache2/bin/apachectl configtest <--환경설정 에러 확인
Syntax Ok
#
------------------------------------------------------------------------------
7.[TEST] - HTTP & PHP
------------------------------------------------------------------------------
#echo "<html><body><font color=blue size=10>Installed Successfully!!</font></body></html>
/usr/local/apache2/htdocs/index.html
#echo "<? phpinfo(); ?>" > /usr/local/apache2/htdocs/test.php

[출처]http://cafe.naver.com/reming/4 엔에이(3617717)
2. Apache 모듈 제목 및 기능 정리
mod_actions 이 모듈은 미디어종류나 요청메서드에 따라 CGI 스크립트를 실행한다.
mod_alias 파일시스템의 다른 부분들을 문서 계층구조에 포함하고, URL 리다이렉션을 제공한다
mod_asis HTTP 헤더를 포함한 파일을 보낸다
mod_auth_basic Basic authentication
mod_auth_digest MD5 Digest Authentication을 사용한 사용자인증.
mod_authn_alias Provides the ability to create extended authentication providers based on actual providers
mod_authn_anon 인증영역에 "익명(anonymous)" 사용자의 접근을 허용한다
mod_authn_dbd User authentication using an SQL database
mod_authn_dbm DBM 파일을 사용한 사용자 인증
mod_authn_default 최후 인증모듈
mod_authn_file 문자파일을 이용한 사용자 인증
mod_authnz_ldap Allows an LDAP directory to be used to store the database for HTTP Basic authentication.
mod_authz_dbm DBM 파일을 사용한 그룹 인증
mod_authz_default 최후 권한부여모듈
mod_authz_groupfile 일반 문자파일을 이용한 그룹 권한부여
mod_authz_host 호스트 (이름이나 IP 주소)를 사용한 그룹 권한부여
mod_authz_owner 파일 소유자를 이용한 권한부여
mod_authz_user 사용자 권한부여
mod_autoindex 자동으로 유닉스의 ls 명령어나 Win32의 dir 쉘명령어와 유사한 디렉토리 목록을 만든다
mod_cache URI를 키로 사용하여 내용을 캐쉬한다.
mod_cern_meta CERN 웹서버 메타파일 지원
mod_cgi CGI 스크립트 실행
mod_cgid 외부 CGI 데몬을 사용하여 CGI 스크립트를 실행
mod_charset_lite 문자집합 변환을 지정
mod_dav Distributed Authoring and Versioning (WebDAV) 기능
mod_dav_fs mod_dav을 위한 파일시스템 제공자
mod_dav_lock generic locking module for mod_dav
mod_dbd Manages SQL database connections
mod_deflate 내용을 클라이언트로 보내기 전에 압축한다
mod_dir "마지막 슬래쉬" 리다이렉션을 제공하고 디렉토리 index 파일을 서비스한다
mod_disk_cache Content cache storage manager keyed to URIs
mod_dumpio Dumps all I/O to error log as desired.
mod_echo 프로토콜 모듈을 설명하기위한 간단한 echo 서버
mod_env CGI 스크립트나 SSI 페이지에 전달할 환경변수를 수정한다
mod_example 아파치 모듈 API를 설명한다
mod_expires 사용자가 지정한 기준에 따라 Expires와 Cache-Control HTTP 헤더를 생성한다
mod_ext_filter 응답 내용을 외부 프로그램으로 처리한 후 클라이언트로 보낸다
mod_file_cache 메모리에 정적 파일들을 캐쉬
mod_filter Context-sensitive smart filter configuration module
mod_headers HTTP 요청 헤더와 응답 헤더 수정
mod_ident RFC 1413 ident 검색
mod_imagemap 서버측 이미지맵(imagemap) 처리
mod_include Server-parsed html documents (Server Side Includes)
mod_info 서버 설정에 대한 종합적인 정보를 보여준다
mod_isapi Windows용 아파치에서 ISAPI Extension 사용
mod_ldap LDAP connection pooling and result caching services for use by other LDAP modules
mod_log_config 서버로의 요청을 로그에 기록한다
mod_log_forensic Forensic Logging of the requests made to the server
mod_logio 요청당 입출력 바이트수를 기록
mod_mem_cache URI를 키로 사용하여 내용을 캐쉬한다.
mod_mime Associates the requested filename's extensions with the file's behavior (handlers and filters) and content (mime-type, language, character set and encoding)
mod_mime_magic Determines the MIME type of a file by looking at a few bytes of its contents
mod_negotiation Provides for content negotiation
mod_nw_ssl Enable SSL encryption for NetWare
mod_proxy HTTP/1.1 proxy/gateway server
mod_proxy_ajp AJP support module for mod_proxy
mod_proxy_balancer mod_proxy extension for load balancing
mod_proxy_connect mod_proxy extension for CONNECT request handling
mod_proxy_ftp FTP support module for mod_proxy
mod_proxy_http HTTP support module for mod_proxy
mod_rewrite Provides a rule-based rewriting engine to rewrite requested URLs on the fly
mod_setenvif 요청의 성격에 따라 환경변수 설정을 변경한다
mod_so 시작할때 혹은 재시작할때 실행가능한 코드와 모듈을 서버로 읽어들인다
mod_speling 사용자가 대소문자를 잘못 사용하거나 맞춤법이 틀리는 것을 한번까지 허용하여 잘못된 URL을 고치려고 시도한다
mod_ssl Strong cryptography using the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols
mod_status 서버 활동과 성능에 대한 정보를 제공한다
mod_substitute Perform search and replace operations on response bodies
mod_suexec CGI 스크립트를 특정 사용자와 그룹 권한으로 실행한다
mod_unique_id 각 요청마다 유일한 식별자를 가지는 환경변수를 제공한다
mod_userdir 사용자별 디렉토리
mod_usertrack Clickstream logging of user activity on a site
mod_version 버전별 설정
mod_vhost_alias Provides for dynamically configured mass virtual hosting
[출처] http://httpd.apache.org/docs/2.2/mod/
8. Apache 설정 파일 정리
httpd.conf 파일은 크게 세부분으로 나누어져 있다.

Section 1: Global Environment : 아파치 전체적인 영향이 미치는 설정
Section 2: 'Main' server configuration : 주 서버에 대한 설정
Section 3: Virtual Hosts : 가상 호스트에 대한 설정

### Section 1: Global Environment
전제환경설정 파트로 Section 1에서 설정하는 것들은 아파치 웹서버에 전반적인 영향을 미친다.

ServerType standalone

서버의 구동방법으로는 standalone과 inetd방식이 있는데, standalone 방식은 하나의 웹데몬(아파치서버)이 클라이언트의 접속을 모두 처리하는 방식으로 응답속도가 빠른 방법으로 주로 이방식을 사용한다. inetd 방식은 inetd라는 시스템의 /etc디렉토리 끝에 존재하는 inetd라는 슈퍼데몬이 클라이언트의 접속요구가 있을 때마다 웹서버를 구동하는 방식이다. 일반적으로 응답속도가 빠르고 효율적인 standalone으로 설정하여 사용한다.

ServerRoot "/usr/local/apache"

아파치서버의 홈디렉토리를 지정하며 절대경로로 지정한다. 이후로 나오는 대부분의 패스들은 이 경로에 대한 상대경로로 지정이 된다. 예를 들어 환경설정파일, 에러로그파일등의 상대경로의 기준이 되는 위치이다.

LockFile logs/accept.lock

아파치 컴파일시 USE_FCNTL_SERIALIZED_ACCEPT나 USE_FLOCK_SERIALIZED_ACCEPT으로 컴파일 했을 때 사용되는 LockFile의 경로지정시에 사용된다. 가급적 기본값으로 사용한다.

PidFile logs/httpd.pid

PidFile 설정은 ServerType을 Standalone으로 설정했을때만 유효한 것으로 아파치 서버의 프로세스가 생성되어 있을 때 그 프로세서ID(PID)를 기록하는 파일을 지정한다. 당연히 아파치서버가 재시작되거나 과부하로 인해 PID가 바뀌게 될 경우에는 이 파일의 PID값도 바뀌게 된다. 즉 다시말해서 여기서 지정된 파일(httpd.pid)에 실행되고 있는 아파치서버의 프로세스번호(PID)값이 기록된다고 하면 정답이다. ServerRoot를 기준으로한 상대경로로 지정된다. 절대경로로 지정하려면 "/"로 시작하는 절대경로를 적어주면 된다.

ResourceConfig conf/srm.conf
AccessConfig conf/access.conf

아파치 서버의 환경설정파일은 3개이au httpd.conf, srm.conf, access.conf 가 그것이다. 그러나 하나의 설정파일로 하는 것이 효율적이기 때문에 지금은 httpd.conf파일안에 3개의 파트(Section)로 나누어서 하나의 파일안에서 설정을 하고 있다. srm.conf와 access.conf파일의 내용은 현재 비어있는 상태이지만, 필요하다면 이 파일 내에도 설정을 할 수 있다. 아파치 서버가 실행이 될 때는 httpd.conf, srm.conf, access.conf 순으로 언제나 이 3개의 파일을 모두 읽고 난뒤에 실행이 되기 때문이다. 만약 이 두 개의 파일을 서버가 무시하도록 하려면 다음과 같이 하거나 "#"으로 붙여 두면 주석처리되어 무시된다.

ResourceConfig /dev/null
AccessConfig /dev/null

Timeout 300

클라이언트의 요청에 의해 서버와 연결이 되었을 때 클라이언트와 서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을 초단위로 설정한다. 초기값은 1200이며 보통은 300초로 지정을 한다. 네트웍의 속도가 나쁠수록 수치값은 높게 설정하는 것이 좋다.

KeepAlive On

접속한 채로 특별한 요청없이 지속적인 연결을 허용할 것인지를 설정한다.
허용하지 않으려면 off

MaxKeepAliveRequests 100

클라이언트가 접속된 시간동안 아파치서버에 요청할 수 있는 최대의 개수를 지정한다. 0을 지정하면 제한없음을 의미하며, 서버의 성능향상을 위하여 가능한 높은 값이 좋다.

KeepAliveTimeout 15

아파치 서버는 같은 접속상태의 클라이언트에서 여기서 지정한 초만큼의 요청이 없었을 때 접속을 끊게 된다.

MinSpareServers 5
MaxSpareServers 10

아파치 웹서버는 성능향상과 빠른 응답속도를 위해 유휴서버(현재 서비스대기 중인 프로세스)를 만들게 되는데 이 유휴서버의 개수는 시스템의 상황에 따라 달라지게 된다. 유휴서버가 MinSpareServers의 개수(5) 보다 적게되면 추가로 생성을 하게 되며 MaxSpareServers의 개수(10)보다 많게 되면 죽이게 된다. 즉, 유휴서버의 개수를 적절히 조절하기 위한 것이라 생각하면 된다.

StartServers 5

아파치 웹데몬이 구동될 때 자식프로세스를 몇 개로 할 것인가를 지정한다. 시작할 때 동시에 띄우게 될 웹데몬의 개수이다. 그러나 웹데몬이 구동되고 난 뒤엔 시스템의 상황(부하율등)에 따라 대부분 합리적인 개수만큼 동적으로 생성되었다가 죽기도 하므로 큰 의미를 가지는 것은 아니다.

MaxClients 150

아파치웹서버에 접근할 수 있는 클라이언트의 최대갯수는 이 상한값으로 제한한다. 여기서 지정한 개수이상의 클라이언트의 요청이 생긴다면 아파치는 응답하지 않고 이 요청을 무시한다. 이를 제한하는 이유는 시스템의 자원을 아파치 웹서버가 무한정 차지하는 것을 방지하기 위한 것이다.

MaxRequestsPerChild 30

아파치 웹서버의 자식프로세스들이 클라이언트의 요청 개수를 지정한다. 만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 이 자식프로세스는 자동으로 죽게된다. 이 값이 0으로 설정이 된다면 자식프로세스가 자동으로 죽는일은 없을 것이다. 그러나 0아닌 다른 값으로 설정함으로서 프로세스의 수를 적절히 조절하여 시스템의 부하조절과 자원낭비를 어느정도 방지 할 수 있다.

Listen 3000
Listen 12.34.56.78:80

시스템의 기본값이외에 다른 IP Address와 포트에 대해서도 연결할 수 있도록 해 준다. 환경설정파일(httpd.conf) 맨뒤에 나오는 가상호스트(Virtual Host)부분에서 설정되는 가상호스트를 설정하기 위해 필요하다.

BindAddress *

서버가 응답할 수 있는 IP Address를 설정하는 것이다. 하나의 시스템에 있는 아파치웹서버 하나로 여러 웹서버처럼 관리하는 웹호스팅서비스등에서 많이 이용하는 것으로 여러 IP Address를 인식할 수 있게 한다. "*"으로 설정이 되었다면 모든 IP Address에 대해 응답할 수 있으며, IP Address를 지정한다면 지정한 IP Address에 대해서만 응답할 수 있게 된다. 여러개의 IP Address를 ISP로부터 할당받아서 웹호스팅서비스를 하고자 한다면 이부분에서 지정해 주면된다. 이 설정파일의 맨 뒷부분에 나오는 <VirtualHost>~</VirtualHost>부분의 IP bind 가상호스트부분에서 아파치 웹서버가 응답할 수 있도록 하려면 여기서 IP Address를 지정해 줘야 한다.

ExtendedStatus On

server-status로 아파치웹서버의 상태를 상태를 모니터링 할 때 "자세한상태정보"기능을 제공할 것인지(On) 아닌지(Off)를 설정하는 것이다.

### Section 2: 'Main' server configuration

Section 2에서 설정하는 항목들은 아파치의 주된서버가 사용할 값들을 지정한다. <VirtualHost>에 정의된 가상호스트들에서 지정하지 않는 것은 여기서 지정된 값이 기본값으로 적용된다. 또한 여기서 지정하는 값을 각 <VirtualHost>내에도 지정할 수 있으며 이경우엔 각<VirtualHost>내에서 지정한 값이 우선적용된다.

Port 80

아파치웹서버의 기본포트를 지정한다. 특별하게 사용하는 것이 아니라면 80번으로 해둬야 한다. 사용가능한 포트는 0 ~ 65535이며 1024이하의 포트번호는 시스템에서 특별하게 예약되어 있으므로 80번 이외의 다른 포트를 사용하려면 1024이상의 포트번호를 지정해서 사용해야 할 것이다. 특별한 지정이 없다면 <VirtualHost>에 정의된 각각의 가상호스트들의 기본포트가 된다. 만약 <VirtualHost> 내에서 Port가 지정이 된다면 그 포트번호가 우선한다.
(특별히 PORT를 따로 지정해 줄 필요가 있을 때는 따로 지정해 주며, 이때는 웹서버로 접근할 때 반드시 따로지정한 PORT번호로 접근해야 한다. 예를들어 Port 1234로 지정했다면, 접근시 : http://www.domain.co.kr:1234 로 접속해야한다. 단, 80번은 default이므로 Port번호를 입력하지 않아도 도메인만으로 그냥 접근할 수 있다. 예: http://www.domain.co.kr )

User nobody
Group nobody

아파치 웹데몬이 요청을 받았을 때 여기서 지정한 user와 group으로 응답을 하게된다. 이 설정은 ServerType이 Standalone방식이며, 아파치의 실행이 root권한으로 실행이 되었을 때 유효한 것이다. 많은 웹서버관리자들이 nobody로 설정을 해 두고 있으며, 만약 시스템에 nobody user가 없다면 새로생성(useradd)을 해야 할 것이다. 단, root로 설정하는 것은 절대로 있어서는 안되며 nobody이외의 다른 시스템사용자 id로 지정을 한다면 정말 신중히 모든면(시스템 보안 및 자원사용등)에서 깊게 고려를 해봐야 한다.

ServerAdmin webmaster@www.domain.co.kr

여기서 지정하는 email address는 웹문서 로딩에러등의 문제에서 클라이언트측으로 보내질 메일주소값이다. 대부분 웹서버관리자의 email address로 설정을 한다.

ServerName new.host.name

클라이언트에게 보여주는 호스트이름을 지정한다. www를 쓰지않는 호스트에서 www를 쓰는 것처럼 보이게 할 수 있다. 예를 들어 bbs.manualand.co.kr을 www.manualand.co.kr로 지정해서 쓸 수 있다.
이곳에 IP Address를 적게 되면 클라이언트에는 Ip Address를 보여준다.

DocumentRoot "/usr/local/apache/htdocs"

아파치 웹서버의 웹문서가 있는 경로를 지정한다. 예를 들어 "http://www.manualand.co.kr/index.html"의 초기 문서라면 이 초기문서의 절대 경로는 여기서 지정된 "/usr/local/apache/htdocs/index.html"이 된다. 경로의 맨 마지막에 "/"를 추가해서는 안된다. Alias를 사용하여 다른 위치를 지정할 수도 있다.

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

<Directory>에서 지정되는 값에 대한 옵션은 다음과 같은 의미를 가지고 있다.
None : 일단 모든허용을 하지 않는다.
All : 모든허용을 한다.
Indexes :
Includes :
FollowSymlinks :
ExeCGI :
MultiViews :

UserDir public_html

하나의 아파치 웹서버에서 여러 사용자의 홈페이지를 별도로 만들어 관리할 때 필요한 개별 가입자의 홈페이지 디렉토리이름이다. 예를 들어 sspark이란 계정가입자의홈페이지는 "http://manualand.co.kr/~sspark"라는 홈페이지를 가지고 있을 때 sspark의 계정에서 "public_html"이란 디렉토리가 홈디렉토리가 되어 이 디렉토리에 있는 초기문서 index.html을 불러서 보여주게 된다.

<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch
IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<Limit PUT DELETE PATCH PROPPATCH MKCOL COPY
MOVE LOCK UNLOCK>
Order deny,allow
Deny from all
</Limit>
</Directory>

계정사용자의 홈페이지(public_html)의 접근에 대한 옵션을 지정한 것이다.

DirectoryIndex index.html

디렉토리만을 지정했을 경우에 그 디렉토리에서 찾게될 문서의 순서를 지정해 준다. 즉, 디렉토리 이름만을 지정하더라도 여기서 지정한 index.html을 찾아서 웹브라우즈에 보여준다. 여러개의 파일을 지정할 수 있으며, 이런 경우에는 순서대로 찾아서 보여준다. 예를 들어 "DirectoryIndex index.html index.htm"로 지정했다면 먼저 "index.html"을 찾아서 있다면 이 파일을 로딩하고, "index.html"이 없다면 "index.htm"을 찾아서 로딩해 준다.

AccessFileName .htaccess

디렉토리별로 접근제어할 정보(ID, Password)를 담고 있는 파일을 지정한다. 디렉토리별로 인증을 거쳐서 접근할 수 있는 설정을 하기위한 것이다. 예를 든다면 어떤 홈페이지의 전부나 혹은 일부에로 접근하려고 할 때 ID, Password를 묻는 창이 뜨면서 맞게 입력한 경우에만 접근허용하는 것이다. 보안상의 이유로 이 파일의 이름을 다른 이름으로 바꾸로 싶다면 ".htaccess"대신에 다름이름을 적어주면 된다.

<Files ~ "^.ht">
Order allow,deny
Deny from all
</Files>

바로위에서 설정한 파일(".htaccess")의 내용을 볼 수 없게 할 때 사용하는 옵션이다. 보안상의 이유로 이 옵션은 설정해 두는 것이 좋다. 만약 이 옵션을 주석처리해 둔다면 ".htaccess"파일에 대한 보안은 누구도 장담할 수 없을 것이다.

UseCanonicalName On

TypesConfig conf/mime.types

웹서버의 mime type을 지정한 파일을 지정한다. mime.types파일은 서버에 의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.

DefaultType text/plain

mime.types 파일에 정의 되어있지 않은 파일형식에 대한 요청을 받았을 때 알 수 없는 문서타입에 대하여 사용할 기본적인 mime 타입을 정해둔다.

HostnameLookups Off

웹서버의 로그(access_log)를 지정하는 Format에서 "DNS Lookup"으로 지정하였을 때, domain으로 남길 것인가, IP Address로 남길 것인가를 지정한다. Default로 Off는 IP Address로 남기는 것이며, Domain으로 변경할 필요가 없으므로 on으로 설정한 것보다는 속도가 조금빠르다.on으로 하게 되면 IP address를 IP Domain으로 변환해야 하므로 속도가 조금 느릴 수 있다.

ErrorLog logs/error_log

아파치 웹서버의 에러로그 기록파일을 지정한다. 참고할 사항은 맨 마지막에 설정하는 <VirtualHost>부분에서 각서버에 대한 에러파일을 지정해 두지 않으면 그에 대한 에러로그도 여기에 기록되며, 지정해 두게 되면 그에 해당하는 로그는 이 파일에 기록되지 않는다.

LogLevel warn

바로위에서 설정한 에러로그 파일에 얼마나 자세하게 적을 것인지를 결정한다. 다음에 해당하는 순서대로 중요도가 정해진다. " debug → info → notice → warn → error → crit → alert → emerg "

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i"
"%{User-Agent}i"" combind
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

바로 아래에서 사용할 CustomLog에서 사용할 몇가지 로그형식의 별명을 정한 곳이다.
웹서버의 관리자나 서버관리자는 이 부분을 특히 유심히 봐둬야 한다. 웹서버의 로그를 어떤 식으로 남길 것인가를 결정하는 Format을 지정하는 곳이다. 원하는 정보를 지정해서 볼 수 있으므로, 관리자에게 필요한 Format으로 설정해야 하며, 또한 접속통계를 내기에 적당한 Format으로 설정해 둬야 한다.

CustomLog logs/access_log common

위에서 정한 로그형식(여기선 common)대로 로그를 남기게 된다.
맨마지막에서 지정하는 <VirtualHost>부분에서도 아파치 1.3.9버전 부터는 CustomLog를 가상호스트별로 지정할수 있도록 CustomLog를 제공한다. <VirtualHost>에서 CustomLog를 지정하지 않으면 여기서 지정한 형식대로 로그를 남기게 되며 <VirtualHost>부분에서 CustomLog를 지정했을 경우에는 여기서 지정한 로그형식은 무시된다.

#CustomLog logs/referer_log referer
#CustomLog logs/agent_log agent
#CustomLog logs/access_log combined

위에서 지정한 4가지의 로그형식(combind, common, referer, agent)중에서 원하는 부분의 #(주석행)을 제거하면 지정된다.

ServerSignature On

서버가 생성하는 문서(error documents, FTP directory listings, mod_status and mod_info output etc., but not CGI generated documents)의 trailing footer line의 설정을 가능하게 한다.

Alias /icons/ "/usr/local/apache/icons/"

필요한 만큼의 디렉토리 별칭을 만들어 쓸 수 있다. 사용하는 형식은 다음과 같다.
Alias fakename(가상이름) realname(진짜이름)

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

ScriptAlias는 서버스크립트를 포함한다. ScriptAlias는 실제디렉토리 안에 들어있는 문서를 서버에 의해 응용프로그램으로 취급되어 실행되는 것을 제외하고는 근본적으로 Aliases와 같다.

IndexOptions FancyIndexing

IndexOPtions는 디렉토리목록을 표시할 때 사용할 옵션을 지정한다. Standard는 표준적인 디렉토리를 나타내며, FancyIndexing은 좀더 예쁜 디렉토리목록을 표시해 준다.

아래에서 지정하는 AddIcon으로 시작하는 설정은 바로위에서 설정한 디렉토리인덱싱 옵션을 FancyIndexing으로 한 경우에 해당하며 디렉토리 목록을 표시할 때 각 파일 확장자에 따라서 어떤 아이콘을 선택하여 보여줄 것인지를 지정한다.

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

DefaultIcon /icons/unknown.gif

여기서 지정한 확장가가 아닌 경우에 여기서 지정한 기본아이콘으로 보여준다.

AddDescription "GZIP compressed document" .gz
AddDescription "tar archive" .tar
AddDescription "GZIP compressed tar archive" .tgz

AddDescription은 서버가 생성한 인덱스의 파일 뒤에 간단한 설명을 표시할 때 사용한다. 이 설정은 IndexOptions가 FancyIndexing으로 설정되었을때만 표시되며, 설정형식은 다음과 같다.
형식 : AddDescription "표시할 설명" 파일확장자

ReadmeName README

ReadmeName은 디렉토리목록표시 뒤에 붙여서 보여줄 README파일의 이름을 지정한다.(일종의 꼬릿말)

HeaderName HEADER

HeaderName은 디렉토리목록표시 앞에 붙여질 파일의 이름을 지정한다. (일종의 머릿말)

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

디렉토리목록을 인덱싱할 때 제외할 파일명을 지정한다. 즉 디렉토리 목록에 포함하지 않을 파일을 지정한다. 쉘스타일의 와일드카드(*, ?)가 허용된다.

AddEncoding x-compress Z
AddEncoding x-gzip gz tgz

AddEncoding은 특정브라우즈(Mosaic/X 2.1+)에서 받고있는 중에 정보에 대한 압축해제를 할 수 있도록한다. 단 모든 웹브라우즈에서 이 기능을 제공하는 것은 아니다.

AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it

AddLanguage는 문서의 언어를 지정하게 한다.

LanguagePriority en fr de

언어의 우선순위를 내림차순으로 지정한다.

AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
AddType application/x-tar .tgz

AddType은 mime.types의 실제 편집없이도 mime을 설정할 수 있다.

AddHandler cgi-script .cgi

AddHandler는 파일확장자를 처리기(Handler)에 매핑(연결)시켜주게 된다.

AddType text/html .shtml
AddHandler server-parsed .shtml

SSI(Server Side Include)문서를 인식하게 하기위한 설정이다. SSI코드가 들어가 있는 문서는 확장자가 *.shtml이다. 시스템의 날짜와 카운터등 CGI프로그램을 하지 않아도 HTML문서에서 단 몇줄로 CGI의 효과를 낼 수 있는 SSI기능을 인식하게끔 하는 설정이다. "7장. 아파치와 SSI"편에서 자세히 설명되어 있다.

#Format: Action media/type /cgi-script/location
#Format: Action handler-name /cgi-script/location

Action은 매칭되는 파일이 호출될때마다 스크립트를 실행시킬 수 있도록 미디어 타입을 정의한다.

MetaDir .web

MetaDir은 아파치가 찾을 메타정보파일들의 디렉토리이름을 지정한다. 이 파일들은 문서를 전송할 때 포함되는 HTTP 헤더정보가 포함되어 있다.

MetaSuffix .meta

MetaSuffix는 메타정보를 포함하고 있는 접미어의 이름을 지정한다.
에러발생시 응답을 정의할 수 있는 방법을 3가지 나타내고 있다.
1) 일반적인 텍스트

ErrorDocument 500 "The server made a boo boo.

2) 지역적인 방향전환

ErrorDocument 404 /missing.html
ErrorDocument 404 /cgi-bin/missing_handler.pl

3) 외부 방향전환

ErrorDocument 402
http://some.other_server.com/subscription_info.html

다음의 BrowserMatch는 keepalives기능을 쓰지못하게 하며 HTTP 헤드방식을 설정한다.

BrowserMatch "Mozilla/2" nokeepalive

이 설정은 Netscape 2.x 또는 이를 따르는 브라우즈에 대하여 KeepAlive 기능을 쓰지 못하게한다.

BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0
force-response-1.0

이 설정은 잘못구현된 HTTP/1.1과 301또는 302반응에 대하여 KeepAlive를 적절히 제공하지 못하는 마이크로소프트 인터넷익스플로러 4.0b2d에 관한 것이다.

BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0

위의 3가지 설정은 기본적인 1.1반응도 처리하지 못하며 HTTP/1.0 스팩을 제한하고 있는 브라우즈에 대하여 HTTP/1.1반응을 하지 못하게 한 것이다.

<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from www.manualand.co.kr
</Location>

서버의 상태를 점검할 수 있게하는 설정이다. 이는 "http://www.manualand.co.kr/server-status"와 같은 형식으로 서버의 상태를 점검할 수 있다. "6장. 아파치서버 모니터링"편에서 자세히 설명되어 있다.
여기서 지정한 "SetHandler server-status"의 설정으로 인해 서버 모니터링을 할 수 있는 것이다.

<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from www.manualand.co.kr
</Location>

이설정을 위해서는 mod_info.c가 적재되어야 하며, 이는 "http://www.manualand.co.kr/server-info"와 같은 방식으로 서버의 정보를 볼 수 있다. 위에서 설정한 server-status와 함께 실행중인 웹서버의 상태점검을 위한 것이다.

<Location /cgi-bin/phf*>
Deny from all
ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
</Location>

아파치 1.1이전 버전의 오래된 버그에 대한 악용이 있을시에는 지정한곳 (http://phf.apache.org/phf_abuse_log.cgi) 으로 방향을 전환시킨다.

<IfModule mod_proxy.c>
ProxyRequests On

아파치 웹서버를 Proxy서버로 사용할 때 on을 해줘야 한다. 즉 프락시서버 지시자로서 프락시서버를 on 시킨다.

<Directory proxy:*>
Order deny,allow
Deny from all
Allow from .your_domain.com
</Directory>

ProxyVia On

HTTP/1.1 "Via:"헤드처리를 활성화시킬 것인지 비활성화 시킬것인지를 지정한다. Off, On, Full, Block중 하나가 올 수 있으며 Full은 서버버전을 포함하며, Block은 나가는 모든 것에 대해 Via:헤더를 제거한다.

CacheRoot "/usr/local/apache/proxy"
CacheSize 5
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1
NoCache a_domain.com another_domain.edu joes.garage_sale.com

이 설정은 캐시기능을 활성화 하기 위한 것이다.

### Section 3: 가상호스트 설정
여러분의 시스템에서 여러개의 도메인이나 호스트네임을 설정하여 관리하고자 한다면 <VirtualHost>부분을 설정해 줘야 한다. 가상호스트에 대한 정보는 http://www.apache.org/docs/vhosts/를 참조해 보면 좀더 자세한 정보를 얻을 수 있다. '-S'옵션을 사용함으로써 가상호스트의 설정에 대한 점검을 할 수 있다. name-based 가상호스트를 사용하길 원한다면 적어도 한 개이상의 IP Address를 정의할 필요가 있다. "4-2절의 내용"과 "10장.웹호스팅 서비스를 위한 가상호스트"편에서 자세히 설명되어 있다.

NameVirtualHost 12.34.56.78:80
NameVirtualHost 12.34.56.78

<VirtualHost www.manualand.co.kr>
ServerAdmin webmaster@manualand.co.kr
DocumentRoot /home/sspark/public_html
ServerName www.manualand.co.kr
ErrorLog /home/sspark/public_html/aw/error_log
CustomLog /home/sspark/public_html/aw/access_log common
</VirtualHost>

ServerAdmin은 해당서버의 관리자 전자우편이며,
DocumemtRoot는 해당서버의 홈디렉토리이며,
ServerName은 해당서버의 도메인이며,
ErrorLog는 해당서버의 에러파일 위치이며
CustomLog는 로그파일위치와 포맷을 지정한 것이다.

<VirtualHost _default_:*>
</VirtualHost>

Default 가상호스트 설정으로 위에서 설정되지 않은 다른 모든 호스트에 대해서 응답을 하고자 할 경우설정해 준다.

[출처] http://tong.nate.com/lmiraclel/21780483
9. 가상 호스트 개념 정리
1. 가상호스트란?
웹서버에는 기본적으로 존재하는 호스트가 있다.
이를 웹서버의 주호스트(main host)라고 한다.
하나의 웹서버에는 주호스트 외에 별도의 홈디렉토리를 가진 여러개의 호스트를 설정하여 운용할 수 있다.
주로 웹호스팅 서비스에 사용되며 주호스트외에 나머지 호스트들을 모두 가상호스트(virtual host)라고 한다.
이런 가상호스트를 가장 적절하게 이용하는 것이 웹호스팅 서비스인 것이다.
웹호스팅 서비스를 하려면 하나의 서버에 여러 가입자를 수용해야 하는데 이때 아파치 웹서버의 가상호스트로 설정하여 운용하면 해결할 수 있다.
물론 다른 웹서버에도 이런 기능은 있으며 설정하는 방법에는 조금씩 차이가 있다.
이런 가상호스트에는 몇가지 종류가 있다.
즉, 다음과 같은 종류가 있을 수 있다.

● 이름기반의 가상호스트(Name-based virtual host)
● 주소기반의 가상호스트(IP-based virtual host)
● 포트기반의 가상호스트(Port-based virtual host)
● 기본 가상호스트(Default virtual host)

위의 네가지 경우 모두 하나의 물리적인 서버에서 운용된다는 것과 다수개의 가상호스트를 운용한다는 것을 전제로 한다.
이름기반의 가상호스트는 하나의 IP Address에 여러개의 가상호스트를 운용하는 것이며, 주소기반의 가상호스트는 가상호스트 각각에 하나씩의 IP Address를 할당하여 운용하는 것이고 포트기반의 가상호스트는 하나의 동일한 호스트에 포트만 다르게 지정하여 운용하는 것이다.
그리고 마지막 기본 가상호스트는 설정되어있는 어떤 호스트도 해당사항이 없는 호스트의 로딩요구를 받았을때 기본으로 응답하게될 호스트를 지정하게 된다.
자 그럼 위에서 제시한 4가지 방법의 가상호스트 운용방법을 하나씩 배워보도록 하자.

2. 하나의 IP Address로 여러개의 가상호스트 설정하기
일명 이름기반의 가상호스트(name-based virtual host)라고 한다.
이름기반의 가상호스트는 하나의 IP Address에 여러개의 가상호스트를 사용하는 것이며 이 방법이 가장 보편적인 방법이다.
인터넷 사용인구의 급격한 증가로 인하여 IP Address가 많이 필요하게 되었고 급기야는 IP Address가 모자라는 지경에 이르게 되었다.
이런 시점에서 웹호스팅 사업등과 같이 하나의 시스템에 여러개의 웹서버를 운용해야하는 오늘날의 여건에는 이름기반의 가상호스트가 가장 적절하다고 할 수 있다.
아래의 예는 하나의 IP Address(168.126.72.51)에 3개(A, B, C)의 가상호스트를 설정한 것이다.


3. 각각의 IP Address별로 가상호스트 설정하기
일명 IP Address기반의 가상호스트(IP-based virtual host)라고 한다.
웹호스팅 사업을 하는 초창기에 사용된 방법으로 주소기반의 가상호스트는 하나의 시스템에 여러개의 IP Address를 할당하여 가상호스트에 각각 하나씩 할당하여 운용하는 것이다.
가입자에게 각각 하나씩의 IP Address를 할당하는 주소기반의 가상호스트로 웹호스팅등의 서비스를 하려면 일단은 IP Address의 수를 받아들일 가입자 수 이상 확보를 해 둬야 한다.
약 1년전 까지만 해도 대부분의 웹호스팅업체에서는 주소기반의 가상호스트로 운용을 했었다.
하지만 인터넷의 활용인구가 급속히 늘어난 현재 웹서버등의 수요와 함께 IP Address에 대한 수요도 급팽창하게 되어 IP Address를 할당받기는 정말 힘들어 졌다.
웹호스팅서비스의 초창기 시절에는 주소 기반의 가상호스트로 서비스를 했으나 현재는 이름기반의 가상호스트로 운용을 하지 않을 수 없는 실정이 되었다.
하지만 이름기반의 가상호스트보다도 더 안정적이고, 더 효율적이며 관리하기도 편한 것이 주소기반의 가상호스트이다.
아래의 예는 3개(가, 나, 다)의 가상호스트에 각각 하나씩의 IP Address를 할당하여 운용하기위한 설정이다.


이 경우에 서버의 기본 IP Address인 168.126.72.51은 주호스트인 ciss9.kornet.net(가)으로 할당하고 첫 번째 가상호스트인 www.manualand.co.kr(나)은 168.126.72.52에 할당하였다.
그리고 두 번째 가상호스트인 www.hyung.co.kr(다)은 168.126.72.53에 할당하였다.
이로써 각각의 웹사이트를 하나의 물리적인 서버에서 별도로 관리할 수 있는 것이다.

4. Port별로 운용하는 가상호스트 설정하기
일명 Port기반의가상호스트(Port-based virtual host)라고 한다.
포트기반의 가상호스트는 하나의 웹서버에서 기본포트 80번은 주호스트로 설정하고 여러개의 다른 포트를 지정하여 원하는 만큼의 가상서버를 운용하는 방법이다.
예를 든다면 80번은 주호스트로 사용하고 8080번, 8081번 그리고 8082번의 포트를 지정하여 같은 가상호스트로 사용하는 것이다. 즉, 예를 든다면 다음과 같다.


이와 같이 얼마든지 다른 포트를 지정하여 원하는 만큼의 가상호스트를 운용할 수 있다.

5. Default 가상호스트 설정하기
기본 가상호스트란 예기치 못한 IP Address와 포트의 로딩요구를 받았을 때 가상호스트로 지정되어 있는 호스트를 띄워주는 것이다.
즉, 지정된 가상호스트가 없을 때 기본적으로 응답에 응할 호스트를 지정해 둔 것이 기본 가상호스트이다.


[출처] http://tong.nate.com/bitworld/38982726
10. WebDAV 서버 구축 과정 정리
2. WebDAV 설치하기 우 리는 먼저 첫 번째로 OpenLDAP 패키지를 설치해야 한다. OpenLDAP은 Apache_LDAP_DAV에는 포함되어 있지 않지 않고 사용하는 데도 꼭 필요한 것은 아니지만, mod_ldap를 컴파일하는 데 OpenLDAP 라이브러리가 필요하다. 이것을 설치한 후 아파치와 함께 mod_ldap와 mod_dav를 설치하겠다.
다음의 패키지들을 다운로드 받도록 한다.

  * 아파치 웹 서버   * OpenLDAP(LDAP 라이브러리 파일들을 위해)   * mod_dav (WebDAV를 위한 아파치 모듈)   * mod_ldap (LDAP를 위한 LDAP 모듈)

2.1. 먼저 요구되는 것들
LDAP 와 함께 WebDAV를 컴파일하기 위해 LDAP 라이브러리 파일들을 먼저 설치해야 한다. LDAP 라이브러리 파일들은 아파치에서 사용되는 LDAP 모듈을 컴파일하는 데 필요하다. LDAP 라이브러리를 얻는 가장 좋은 방법은 http://www.openldap.org OpenLDAP에서 소스 코드를 다운로드 받아 컴파일하여 포함된 라이브러리를 사용하는 것이다. 당신은 다른 IPlenet과 비슷한 다른 어떤 LDAP를 사용해도 좋지만, 나는 오픈 소스 솔루션인 OpenLDAP를 추천하는 바이다.

2.1.1. OpenLDAP 라이브러리 파일 설치
su 명령을 사용하여 root의 권한으로 실행해야 한다.:

$ su

OpenLDAP(tar) 소스 파일이 있는 디렉토리로 이동한다. 나의 경우에는 temp 디렉토리 하의 /tmp/download를 주로 이용한다.:

# cd /tmp/download

gzip과 tar를 이용하여 파일의 압축을 해제한다.:

# gzip -d openldap-stable-xxxxxxx.tar.gz
# tar -xvf openldap-stable-xxxxxxx.tar
압축이 풀리며 만들어진 새로운 디렉토리로 이동한다.

# cd openldap-x.x.xx

"configure" 명령을 실행한다. "configure" 에는 많은 명령이 들어있다. "configure --help"를 입력하여 모든 옵션들을 볼 수 있다.

이 웹서버에 LDAP 데몬이 반드시 필요한 것은 아니지만, LDAP 서버를 실행하거나 여타의 상황을 가정할 수는 있겠다. LDAP 데몬을 컴파일하지 않을 때는 'configure'의 명령행 옵션으로 '--disable-slapd' 를 주도록 한다. :

# ./configure --disable-slapd

설정이 끝나면, openldap 패키지를 위한 의존상태를 만들 수 있다.:

# make depend

의존상태를 만들고 나면, openldap 패키지를 컴파일해아 한다. make 명령을 사용하자.:

# make

모든 것이 OK로 나타났다면, 컴파일이 끝난 것이다. 그러면 컴파일된 바이너리들을 정해진 장소로 옮기는 작업이 필요하다.:

# make install

이제 LDAP 라이브러리 파일들을 mod_ldap를 위해 컴파일하는 작업이 필요하다.

2.2. 아파치 선 구성하기
mod_dav는 가 설정된 아파치가 필요합니다. 그래서 설치 위치를 알고 있습니다. 소스파일이 있는 곳으로 디렉토리를 옮깁니다:

# cd /tmp/download
# gzip -d apache_1.x.x.tar.gz
# tar -xvf apache_1.x.x.tar
# cd apache_1.x.x
# ./configure --prefix=/usr/local/apache

2.3. mod_dav의 구성과 설치
위에 설명한 대로 mod_dav는 아파치 설치시에 정적으로 연결될 것입니다. 임시 다운로드 디렉토리로 이동하여 시작합니다:

# cd /tmp/download

gzip과 tar를 이용하여 파일의 압축을 해제합니다.:
# gzip -d mod_dav-1.x.x.tar.gz
# tar -xvf mod_dav-1.x.x.tar

압축을 해제하는 동안 만들어진 새로운 디렉토리로 이동한다:

# cd mod_dav-1.x.x

이제 아파치와 정적으로 링크하기 위해 mod_dav패키지를 구성한다:

# ./configure --with-apache= /tmp/download/apache_1.x.x

파일의 컴파일과 설치:

# make
# make install

mod_dav는 부분적으로 컴파일 되었고 make install단계에서 아파치 소스트리에 적절한 위치에 들어가 있다.

2.4. mod_auth_ldap의 설치와 설정
임시 다운로드 디렉토리로 돌아갑니다:

# cd /tmp/download

mod_auth_ldap 파일의 압축을 해제합니다:

# gzip -d mod _auth_ldap.tar.gz
# tar -xvf mod_auth_ldap.tar

이제 아파치 소스트리로 modauthldap파일들을 설치한다:

cd apache_x.x.x
mv ../modauthldap ./src/modules/ldap

2.5. 아파치의 설정과 설치
이제 WebDAV와 DAV를 위한 LDAP인증을 포함한 아파치를 컴파일하고 설치할 준비가 되었다.
임시 다운로드 디렉토리로 돌아간다:

# cd /tmp/download

아파치 디렉토리로 이동한다:

# cd apache-x.x.x

그리고 mod_dav와 mod_auth_ldap와 함께 컴파일하기 위해 아파치를 구성한다:
  # ./configure --prefix=/usr/local/apache \
     --activate-module=src/modules/ldap/mod_auth_ldap.c \
     --activate-module=src/modules/dav/libdav.a
     [...you can add more options here...]
아파치를 컴파일하고 이를 적절한 위치에 설치한다:

# make
# make install

3. WebDAV서비스를 구성하고 설정하기
이제 쉬운 부분이다. 이 절에서 우리는 아파치 루트 밑에 디렉토리에서 WebDAV가 가능하게 한다.

3.1. /usr/local/apache/conf/httpd.conf의 변경
다음 아파치 지시문이 /usr/local/apache/conf/httpd.conf안에 있는지 검사하라:

Addmodule mod_dav.c

존재하지 않으면 추가하면 된다. 이 지시문은 아파치에게 DAV 특성을 알려준다. 이 지시문은 모든 컨테이너의 밖에 있어야 한다.
다음단계로 아파치가 DAVLockDB 파일을 저장할 장소를 선택해야 한다. DAVLockDB는 WebDAV를 위한 lock 데이터베이스이다. 이 디렉토리는 아파치 프로세스가 쓸 수 있는 곳이어야 합니다.
/usr/local/apache/var아래에 DAVLock파일을 저장할 것이다. 이 디렉토리를 또한 다른 목적으로도 사용할 것이다. /usr/local/apache/var아래에 DAVLockDB를 저장하도록 지정하기 위해 당신의 /usr/local/apache/conf/httpd.conf에 다음의 라인을 추가하라.:

DAVLockDB /usr/local/apache/var/DAVLock

이 지시문 또한 모든 컨테이너 밖에 위치해야 한다.

3.2. DAVLockDB를 위한 디렉토리 생성하기
위에서 설명한대로 DAVLockDB를 위해서 생성될 디렉토리는 아파치 프로세스가 쓸 수 있어야한다.. 일반적으로 웹서버 프로세스는 사용자 'nobody' 로 동작한다. 'ps -ef | grep httpd' 명령을 이용하여 시스템에서 이를 확인하라 다음의 명령들을 이용하여 /usr/local/apache아래에 디렉토리를 만들고 권한을 설정하라:

# cd /usr/local/apache
# mkdir var
# chmod -R 755 var/
# chown -R nobody var/
# chgrp -R nobody var/

3.3. DAV를 가능하게 하기
DAV를 가능하게 하는 것은 쉬운 일이다. 아파치 루트밑에 디렉토리를 위해 DAV를 가능하게 하는 것은 특별한 디렉토리를 위한 컨테이너에 다음의 지시문을 추가하면 된다:

DAV On

이 지시문은 디렉토리와 그 서브 디렉토리에서 DAV를 가능하게 할 것이다.
아래는 /usr/local/apache/htdocs/DAVtest에 WebDAV와 LDAP인증을 가능하게 하는 샘플 구성이다. /usr/local/apache/conf/httpd.conf파일안에 이를 추가하라.

<Directory /usr/local/apache/htdocs/DAVtest>
Dav On
#Options Indexes FollowSymLinks

AllowOverride None
order allow,deny
allow from all
AuthName "username_and_passwd_required"
AuthType Basic
<Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require valid-user
</Limit>
LDAP_Server your.ldap.server.com
LDAP_Port 007
Base_DN "o=ROOT"

UID_Attr uid
</Directory>

3.4. DAVtest라 불리는 디렉토리 생성하기
이전 절에서 설명한것처럼 모든 DAV디렉토리는 웹서버 프로세스가 쓰기 가능해야 한다. 이 예제에서 우리는 웹서버가 사용자 'nobody' 로 동작한다고 가정한다. 이는 일반적인 경우이다. httpd가 어느 사용자로 동작중인지를 확인하기 위해 'ps -ef | grep httpd'를 사용하면 된다.
'DAVtest'라 불리는 시험용 디렉토리를 /usr/local/apache/htdocs 아래에 만들기:

# mkdir /usr/local/apache/htdocs/DAVtest

디렉토리의 권한을 httpd 프로세스가 읽고 쓸 수 있도록 조정하라. httpd가 사용자 'nobody' 로 동작중이라고 가정하면 아래의 명령들을 수행하라:

# cd /usr/local/apache/htdocs
# chmod -R 755 DAVtest/
# chown -R nobody DAVtest/
# chgrp -R nobody DAVtest/

3.5. 아파치를 재시작하기
마지막으로 httpd.conf에 있는 구문들을 검사하기 위해 아파치에 포함되어있는 구성시험루틴을 수행하여야 한다.

# /usr/local/apache/bin/apachectl configtest

만약 이 단계에서 오류를 받았다면 위에 설명한 단계를 올바로 수행하였는지를 검사하라.
구성시험이 성공적이라면 아파치 웹서버를 시작하라:

# /usr/local/apache/bin/apachectl restart

[출처] http://wiki.kldp.org/wiki.php/DocbookSgml/Apache-WebDAV-LDAP-HOWTO
11. Apache log 분석
12. Webalizer를 이용한 로그 분석 정리
13. Apache 사용자 인증 개념 정리
아파치 인증 방식은 소규모 사이트나 스터디 그룹에서 유용하게 사용할 수 있는 아파치 자체 인증 방식이다. 규모가 큰 웹 사이트나 보안에 신경을 써야될 사이트에서는 아파치 인증을 사용하는 것을 신중히 생각해 봐야 된다. 아파치 인증 방식은 믿을 만한 보안 체계는 이루어 지지 않아 보안상 헛점이 들어 날수도 있다는 것을 명심해야 된다.
아파치 인증을 위해 필요한 httpd.conf 설정을 위해서는 아파치의 httpd.conf에 다음과 같이 설정되어 있어야 된다.
아파치 인증을 할 디렉토리의 상위 디렉토리 설정의 AllowOverride 지시자 설정에 All 또는 AuthConfig등이 설정되어 있어야 된다.
지 금 부터의 설명은 아파치 웹 문서의 홈 디렉토리인 /usr/local/apache/htdocs 디렉토리에 AllowOverride 설정을 하고 /usr/local/apache/htdocs/yunil 이라는 디렉토리에 아파치 인증을 통해 접근 허가 하도록 설정할 것이다.

1. httpd.conf 수정하기
가장 먼저 httpd.conf 의 다음 부분을 수정하자.
<Directory "/usr/local/apache/htdocs">=
   Options Indexes FollowSymLinks MultiViews
   AllowOverride  None  --> 이 부분의 None 을 All로 수정한다.
   Order allow,deny
     Allow from all
</Directory>
위의 부분을 수정했으면 httpd.conf를 저장하고 아파치를 restart 시킨다.

[root@yunil /root]# /usr/local/apache/bin/apachectl restart

2 . 아파치 인증을 적용할 디렉토리에 .htaccess 파일 만들기
이제 아파치 인증을 적용할 디렉토리로 이동하자.
여기에서는 /usr/local/apache/htdocs/yunil 디렉토리에 아파치 인증을 적용할 것이다.

[root@yunil /root]# cd /usr/local/apache/htdocs/yunil

/usr/local/apache/htdocs/yunil 디렉토리에 아래와 같은 내용으로 .htaccess 파일을 만들자.
[ .htaccess 파일 내용 ]
AuthType  Basic
AuthName  "루트맨 관리자 로그인"          --->  이 부분은 알아서 마음대로 써주면 된다.
AuthUserFile  /usr/local/apache/.htrootman
Require  valid-user
[ 참고 ]
사실 파일 이름은 꼭 .htaccess 로 만들지 않아도 되는데 이 파일 이름을 변경하고 싶으면 아파치의 httpd.conf 파일을 수정해야 된다. 수정할 부분은 다음과 같다.

AccessFileName .htaccess

--> 이 부분의 .htaccess를 수정하면 되는데 파일 이름의 시작을 .ht 로 하는 것이 좋다.
--> 그 이유는 httpd.conf 에서 .ht 로 시작하는 파일은 보안상 접근할 수 없게 설정되어 있기 때문이다.
--> 물론 이 설정도 변경할 수 있지만 여기서는 설명하지 않겠다.


다음 단계로 넘어 가기 전에 위의 설정이 뭘 의미 하는지 이해하고 넘어 가도록 하자.

AuthType
인증 유형을 설정하는 지시자다. Basic과 Digest를 설정할 수 있다. Digest의 경우 MD5 방식을 사용하는데 MD5를 지원하는 브라우저가 제한 되어 있기 때문에 이 강좌에서는 언급하지 않겠다.

AuthName
인증창의 제목이라고 생각하면 된다. 간단한 스트링을 입력해서 설정하는것이 바람직하다.

AuthUserFile
사용자 User_ID 정보와 Password 정보가 들어 있는 파일을 지정해 주는 것이다.
보안상 꼭 웹 문서 디렉토리 밖에 위치 시키는 것이 좋다. 이 파일은 나중에 만들것이기 때문에 이 파일이 없다고 투덜 거리지 말자.

Require
인증할 대상을 지정한다.
Revalid-user --> AuthUserFile에 등록된 모든 사용자를 인증을 통해 받아 들인다는 설정
Require user 사용자1 사용자2 --> 사용자1과 사용자2만 인증을 통해 받아 들인다는 설정
Require group 그룹1 그룹2 --> 그룹1 과 그룹2 에 속하는 사용자만을 인증을 통해 받아 들인다는 설정
Require 지시자는 하나의 .htaccess 파일에 2개 이상 설정을 할 수도 있다.

3 . 사용자 추가 하기
아파치 인증에 사용할 사용자 추가는 아파치의 bin 디렉토리 안에 있는 htpasswd 라는 명령어로 추가한다.
사용방법은 아주 간단하지만 주의를 기울려야 될 부분이 있다. 일반적인 사용법은 다음과 같다.
htpasswd    [ -c ]   AuthUserFile    사용자명
괄호 안에 있는 -c 옵션은 처음 사용자를 등록할 때 필요한 옵션이다.
AuthUserFile 경로 앞에 -c 옵션을 추가 하게 되면 AuthUserFile 파일에서 지정한 파일을 만들어 준다.
절대 2번째 사용자 등록부터는 -c 옵션을 쓰면 안된다.
만약 실수로 -c 옵션을 쓸 경우 전에 있던 파일은 날라가고 새로운 파일이 만들어 지기 때문에 각별히 주의 해야 된다.

첫번째 사용자 등록을 할 경우


기존의 AuthFile에 사용자를 추가할 경우


3. 특정 사용자를 그룹에 추가 하기
아파치 인증은 사용자 뿐만아니라 그룹에 대해서도 인증을 할 수 있다.
특정 그룹을 아파치 인증을 통해 접근을 허가하기 위해서는 해당 디렉토리 안에 있는 .htaccess 파일에 AuthGroupFile 지시자를 이용해 그룹 정보가 담겨있는 파일의 경로를 지정하고 그룹 파일을 만들어 주면 된다.
[ .htaccess 파일에 추가할 부분 ]
AuthGroupFile   /usr/local/apache/.htgroup

.htaccess 파일의 AuthGroupFile 지시자로 설정했던 파일을 다음과 같이 만들면 된다.
파일의 텍스트 형식은 다음과 같다.

그룹명: 사용자명1 사용자명2 사용자명3 ....
--> 그룹에 포함할 각 사용자명은 공백(Space Bar)로 구분한다.


아피치 인증을 거쳐야 되는 디렉토리에 접근 할 경우 다음과 같은 창이 나타난다.


[출처] apache 사용자 인증|작성자 쉼쉼이
14. MRTG(Multi Router Traffic Grapher) 이용 방법 정리
ㅇ MRTG의 특징
1.대부분의 Unix플랫폼과, WindowsNT상에서 동작 합니다.
2.간단하게 커스터마이즈할 수 있도록 Perl를 사용하고 있습니다.
3.이식성이 좋은 펄을 사용해 SNMP 부분을 프로그래밍했습니다.
그래서 별도로 SNMP 패키지를 설치할 필요가 없습니다.
4.로그를 정리하기 위한 독자의 알고리즘의 채용을 하고 있으므로, MRTG의 로그파일의 사이즈가 커지지 않습니다.
5.MRTG에는 반자동의 설정용툴을 지원합니다.
6.MRTG는 라우터 포트설정이 변경되면 자동으로 체크하여 사용자에게 알려줍니다.(메일)
7. 속도가 중요한 부분은 C로 작성되었습니다.
8.Thomas Boutell의 GD library 를 사용합니다. 그래프는 GIF 포맷으로 만들어집니다.
9. MRTG가 생성하는 HTML파일을 상세하게 설정하는것이 가능.
10.MRTG는 GNU PUBLIC LICENSE 로 제공됩니다.

contrib 디렉토리에 위에서 말한 cpu부하등의 정보를 모니터링하는 툴과 문서가 있습니다.

00INDEX cfgmaker_cisco/ get-multiserial/ mrtgindex.cgi/
00INDEX~ cisco_ipaccounting/ ircstats/ mrtgmk/
14all/ cisco_tftp/ jm/ ovmrtg/
GetSNMPLinesUP/ ciscoindex/ mrtg-archiver/ ping-probe/
NSI/ cpuinfo/ mrtg-blast/ portmasters/
PMLines/ cpumon/ mrtg-dynip/ rdlog2/
TCH/ diskmon/ mrtg-ipacc/ rumb-stat/
ascendget/ distrib/ mrtg-ipget/ stat/
atmmaker/ forecd/ mrtg-mail/ whodo/
cfgmaker_ATM/ get-active/ mrtgidx/ xlsummary/

1. mrtg 설치하기
http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html

(1)MRTG의 최신판을 다운 로드
http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/pub/

mrtg-2_8_9_tar.gz
[root@taejun mrtg-2.8.9]# ls
ANNOUNCE
CHANGES
COPYING
COPYRIGHT
MANIFEST
Makefile.in
README
configure* ------>> 첫 환경설정
configure.in
contrib/ ----->> 각충 추가 프로그램
doc/ ------>> 문서
images/ -------->> 이미지 파일.
install-sh*
run/ ---->> 실행스크립트. 제일 중요
src/
translate/ --->> 지원언어
(2) GD 라이브러리가 없으면 아래 사이트에서 받아서 컴파일
http://www.boutell.com/gd/

(3) Perl 5.004_4 이상 버전이 있어야합니다.
http://www.perl.com/perl/info/software.html

(4) ./configure
시스템에 맞는 Makefile을 만들어주지요.
펄이나 GD경로가 맞는지 확인해보아야하는데 아마 자동으로 찾아줄 것입니다.

(5) make
rateup실행 파일을 만들기 위해서 make 를 실행합니다.
rateup 프로그램은 db 파일을 업데이트하고 그래픽 이미지등을 생성하는 프로그램이라고 하네요

(6) MRTG에서 생성할 웹페이지 디렉토리를 정합니다.
/usr/local/www/htdocs/mrtg 라고 가정하지요.
그러면 여기에 imags 디렉토리 밑의 mrtg*.gif 파일을 다 복사해 줍니다.

(7) run 디렉토리에 실행파일이 있습니다. 확인합시다.
BER.pm SNMP_Session.pm SNMP_util.pm cfgmaker* cfgmaker_ip*
cfgmaker_phys indexmaker* locales_mrtg.pm mrtg*

(8) 다음에 자신의 mrtg.cfg파일을 작성 합니다.
이 파일에 관한 정보는config.html에 있습니다.
아마 처음에는 익숙하지 않은 것입니다.
doc 디렉토리에 샘플파일이 있으니 이것을 참고하는 것도 좋습니다.
이걸 자동으로 만드는 툴이 cfgmaker입니다.
(라우터의 포트번호를 알아내는 프로그래이랍니다)

cfgmaker @ mrtg.cfg

라우터의 community@route 주소 를 지정해야지요.
라우터의 community 이름을 모른다면 public을 사용해보고 그래도 안되면 관리자에게 문의하세요.

./cfgmaker public@203.239.148.193 > mrtg.cfg
이런 식으로 하면 됩니다. 보통 라우터는 gateway주소겠지요?

여기서 mrtg.cfg 설정하는 것이 좀 여러운 부분입니다.

위에서 자동으로 생성된 파일을 다음과 같이 수정합니다.
이건 제일 윗줄에 적으면 되죠. Language는 직접 추가해야합니다.

WorkDir: /usr/local/www/htdocs/mrtg/
Language: korean --->> 한글 설정

대략 이런 형태로 설정될 것입니다.

WorkDir: /usr/local/www/htdocs/mrtg
Target[love]: 2:public@myrouter.somplace.edu
MaxBytes[love]: 64000
Title[love]: Traffic Analysis ISDN
PageTop[love]:
Stats for our ISDN Line

WorkDir: /usr/local/www/htdocs/mrtg
--> 웹 파일이 생성될 디렉토리

Target[love]: 2:public@myrouter.somplace.edu
--> [love] -> 체크하고자하는 라우터의 포트에 붙이는 이름.
나중에 보면 love.html로 됩니당.
--> 2 : 라우터의 포트번호
--> public : 라우터의 commnunity 이름
--> myrouter.somplace.edu : 라우터 주소지정

MaxBytes[love]: 64000
-->> 전송속도를 나타냅니다.

Title[love]: Traffic Analysis ISDN
-->> 말그대로 이에 대한 제목이라고 보면 됩니다.

PageTop[love]:
Stats for our ISDN Line

-->> 웹페이지 제일 위에 올라가는 말입니다.
doc 밑의 config.html 이나 config.txt를 참고하세요.

(9) 이제 MRTG를 실행해야겠지요?
run 디렉토리에서

./mrtg mrtg.cfg

만약 설정파일에 에러가 있다면 에러를 냅니다.
에러가 없다면 이제 라우터에서 트래픽 자료를 수집하지요.
그런데 처음에 실행하면 MRTG가 로그 파일이 없다고 에러 메시지가 나오는데 두세번 실행하면 없어지니 너무 놀라지 마세요.

10. MRTG를 crontab에 등록합니다.

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/mrtg/run/mrtg /usr/local/mrtg/run/mrtg.cfg

(실제로 작성할때는 위에서 는 빼야겠지요? 여러줄의미)
첫컬럼이 무지 긴데 */5 로 해도 되겠지요.
이제 /usr/local/www/htdocs/mrtg/ 로 가서 웹에서 확인해보세요.

2. 기타
2.1. 개요 페이지 만들기
링크가 많다면 페이지가 여러개 필요합니다.
위에서 Target[love] 라고 되어있는데 이렇게 [ ] 안에 들어가 있는 문자열로 웹의 mrtg 디렉토리 밑에 love.html 과 관련 그래픽파일이 생깁니다. 그렇다면 이러한 타겟에 대한 개요 페이지를 만들면 편리할 것입니다. 그러니깐 여러가지 링크에 대한 주메뉴화면이라고나 할까요.

indexmaker

indexmaker -t 'All My Router' -r . -o /usr/local/www/htdocs/mrtg/index.html mrtg.cfg

(실제로 작성할때는 위에서 는 빼야겠지요? 여러줄의미)

2.2. 프락시, 로컬 캐쉬 문제
MRTG는 기본적으로 5분마다 그래프를 업데이트합니다.
그런데 프락시나 로컬 캐쉬때문에 문제가 생길 수 있다고 합니다.
아파치 서버를 사용한다면 mrtg.cfg 에서 WriteExpire와 아파치 웹서버의 MetaDir 키워드를 적절히 세팅해야합니다.
이에 대해선 MRTG 홈페이지 참고. 제가 잘 되니깐 별로 고민안하게 되네요.

2.3. 추가기능
MRTG의 본래의 목적은 트래픽 감시입니다만, 어떤 SNMP변수도 모니터링할 수 있습니다. 모뎀 뱅크 상황,서버의 부하, 인터페이스의 에러율 등.
15. RRDtool(Round Robin Database Tool) 이용 방법 정리
- RRDtool이란?
RRDtool은 연속적으로 변하면서 반복적인 데이터의 흐름을 시간의 흐름에 따라 평균값을 저장하는 방식으로 매우 간략한 하게 장기간 데이터를 보관하고 이를 그래프 파일로 생성을 합니다. 이런 연속적인 데이터의 예로는 네트워크의 흐름정보를 카운터 값으로 보관하고있는 MIB 정보, 사무실 온도, 자동차 도로의 교통 통행량, 날씨의 풍량 등(앞에서도 열거했죠)의 정보들이 있습니다. 암튼 이런 종류의 데이터들을 얼마 되지 않은 크기로 데이터베이스화 하고, 시간단위로 그래프화 하여 이것을 인터넷 상에서 실시간으로 보여 주거나 다른 프로그램에서 쓸 수 있도록 하는 툴입니다.

- MRTG와는 어떻게 틀리나?
MRTG는 사용자의 편의를 위해 자동화 작업을 하면서 출력 그림들이 거의 똑같지요. 또한 입력데이터도 기본이 입출력 트래픽입니다. 그래서 입력값은 2개 이하. 여기에 최대값을 추가하여 한 그래프에서 나올 수 있는 수치그래프가 얼마되지 않지요(4개). 물론 수치그래프가 많으면 많을수록 그래프를 구별하기가 어려워 힘들 때도 있겠지만요. 하지만 이 툴은 입력데이터의 제한이 없으며, 모니터링 기간, 입력데이터 시간간격조정, 그래프 파일의 디자인 변경과 기간 간격 등을 아주 자유롭게 구성 할 수 있습니다.

근데 둘은 한통속입니다. 물론 개발자가 같아서 이지만… MRTG의 소스를 보면 RRDtool을 직접적으로 사용을 하고 있는 것을 확인 할 수 있습니다.

- RRDtool을 쓰려면 뭘 알아야 하나?
표현이 자유로운 반면 해야 할 일도 많겠죠. 우선 표현하고자 하는 데이터를 추출하고 데이터 저장을 위해 Perl을 좀 알아야 해요. 보고서 기능이 막강한 스크립트죠. 그리고 정작 중요한 RRDtool의 사용방법 이것은 데이터베이스를 어떻게 저장하고 시간간격을 어떻게 하고 데이터의 종류는 어떤 것이고 그래프를 어떻게 표현 할 것인가 하는 것들입니다(음 일반적인 데이터베이스 형식과 유사). 그리고 인터넷상에서 결과 그래프를 보려고 하면 HTML 쯤은 당연하겠죠.
기존에 MRTG을 써본 사용자라면 Perl은 제가 사용했던 소스를 조금만 수정해서 쓰면 거의(?) 완벽하게 네트워크 모니터링 그래프를 만들 수 있을 것 같네요. 또 한가지 네트워크 장비나 서버의 MIB 정보를 담고 있는 부분인 OID값을 알아야 하겠지요. 보편적으로 MRTG는 자동으로 포트 등을 검색을 해서 보여 주지만 여기서는 모두가 수동.
기존 MRTG에 만족을 하지 못했거나, 표현해야 할 데이터들이 네트워크/서버하고 관련이 없거나, 3개 이상의 값을 한 그래프에서 모니터링 하고자 할 경우, 기타 시뮬레이션 모니터링 등에 매우 유용하게 쓸 수 있는 툴입니다. - RRDtool의 구조와 저장
RRD 구조는 레코드, 필드를 갖는 일반 데이터베이스의 형식과 흡사하다. 먼저 데이터 수집이 시작 될 시간을 정하게 되며, 다음으로 데이터베이스의 소스 타입을 정하고, 저장 될 데이터의 저장공간을 확보하게 한다. 이로써 RRD는 생성 당시 데이터베이스의 크기가 정해진다.
생성되는 파일은 rrd 확장자를 가지며 XML 파일로 변환과 복구가 가능하다. 저장되는 데이터는 반드시 숫자일 필요는 없으며 상태나 상황의 저장이 가능하다. 입력 데이터의 저장포맷은 binary로써 데이터 접근에 훨씬 더 빠른 처리를 속도를 나타낸다.

다음은 RRDtool의 문법과 RRD 생성의 예제를 보인 것이다.
rrdtool function arguments …
rrdtool create test.rrd                          \
--start 920804400                                \

            DS:speed:COUNTER:600:U:U   \

            RRA:AVERAGE:0.5:1:12            \

            RRA:AVERAGE:0.5:3:8

## test.rrd라는 이름의 RRD파일을 만듦

## 시작시간

## COUNTER형인 데이터소스 네임이 speed인 것을 만듦

## 업 데이트 최대시간간격 600초, 최소치와 최대치 정의 없음

## 5분 동안의 평균데이터를 12회(12회5분=1시간) 구해 저장

## 15분 동안의 평균데이터를 8회(2시간) 구해 저장
아래의 그림은 test.rrd의 데이터베이스 구조를 도식화 한 것이다.
DS(Data Sources)는 데이터 구조를 정의하며 RRA(Round Robin Archives)는 저장데이터의 정의와 크기를 정의한다. 나머지 공간은 실질적으로 데이터가 저장되는 공간을 확보하게 된다. 이는 최초 데이터베이스 생성시 그 데이터베이스의 크기가 확정됨을 의미하고 주기적으로 반복되어 저장된다.

DS 형에는 다음과 같이 4가지가 있다. 연속 증가하는 값을 갖는 COUNTER, 표시값을 나타내는 GAUGE, 증감값을 갖는 DERIVER, 절대값을 갖는 ABSOLUTE가 있다. 아래의 그램은 이들의 상관관계를 그림으로 보인것이다.
데이터 저장은 멀티스텝 프로세싱으로 저장이 된다. 입력 값이 들어오면 RRDtool은 샘플링 하고 RRA의 정의를 참고하여 재 샘플링 과정을 거쳐 RRA 저장공간에 저장하게 된다. 이는 동시에 두개 이상의 입력과정이 처리됨을 의미한다.
RRD의 저장은 RRDtool의 명령형식과 모듈형식으로 이루어진다.
명령형식은 command line에서 다음과 같은 옵션과 데이터를 주게 된다.

rrdtool update rrdfile utime1:value1:value2 utime2:value3:value4
## rrdfile   : RRD 파일 이름
## utimen   : UNIX time
## valuen   : 입력 데이터
모듈형식은 Perl source에 다음과 같은 RRD shared module이 추가된다.

require 'RRDs.pm';
RRDs::update("$rrdfile", "$utime:$value");

지정범위의 계산된 평균값을 얻는 방법은 다음과 같다.

rrdtool fetch test.rrd AVERAGE --start 920804700 --end 920809200

## test.rrd 에서 20:05 ~ 21:20 까지의 데이터의 평균값을 구함.
입력값출력값
speed
20:052345920804700NaN
20:10123579208050000.04
20:15123579208053000.02
20:20123639208056000.00

## NaN : Not a Number

## 20:10 : 12357 - 12345 = 12 300s = 0.04

다음은 DS COUNTER 형에 따른 300초 단위의 평균값을 얻는 계산법이다.

07:10300앞 데이터 없음. 결과값 없음. ”U”.
07:20600600 - 300 = 300
07:30900900 - 600 = 300 300s = 1.
07:4018001800 - 900 = 900 300s = 3

RRDtool은 이 결과를 토대로 하여 그래프의 수치 데이터를 얻는다.

- 그래프 표현
RRDtool의 그래프는 기본적으로 저장된 데이터에 의존하며 생성 파일종류, 크기, 표현시간 등 매우 유연한 그래프를 만들어낸다. 생성된 그래픽 파일은 별도의 수동조작이 없으면 기본값을 적용하여 최대한의 상태를 적용하여 생성한다. 뿐만 아니라 저장된 데이터에 몇몇 수학적 연산을 적용시켜 나타나는 결과값들을 적용시킬 수 있다.

[출처] RRDtool의 기본 개념|작성자 숙명
 
맨위로
1.APM 설치과정 정리
2.Apache 모듈 제목 및 기능
8. Apache 설정 파일
9. 가상 호스트 개념
10. WebDAV 서버 구축 과정
11. Apache log 분석
12. Webalizer를 이용한 로그 분석
13. Apache 사용자 인증 개념
14. MRTG 이용 방법
15. RRDtool 이용 방법
 
맨아래로
이동