Server Admin

본문 바로가기
사이트 내 전체검색


RedHat Linux >> Server Administration for Redhat Linux
[목차]
제5장 Apache Web 서버

    1. DSO를 이용해 아파치 설치하기


이번 장에 소개하는 것은 Dynamic Shared Object(DSO)를 이용한 아파치 설치 방법에 대해 소개한다. 이것은 아파치 모듈을 동적으로 적재하여 기능 확장이 가능하도록 한다. 이를 이용하면 아파치의 메모리 사용량을 줄일 수 있고, 언제라도 모듈을 추가하여 아파치 기능을 확장할 수 있다.

웹서버에 대해 한번이라도 들어본 사람이라면, 아파치라는 이름을 들어보았을 것이다. 아파치는 웹서버 구축을 위한 프로그램이다. 넷크래프트(www.netcraft.com)에 의하면, 2000년 11월 까지 웹서버 중 아파치가 차지하는 비중이 60%이다. 이는 두 번째로 많은 마이크로소프트의 IIS가 20%를 차지하는 것과 비교하면 아파치가 얼마나 널리 이용되고 있는지 짐작할 수 있을 것이다.

이번장엔 아파치의 소스를 컴파일해서 설치하는 방법을 소개한다. 특정 리눅스 배포판을 사용할 경우엔 배포판에 포함된 바이너리 형태 패키지로 아파치를 설치할 수 있다. 이 경우엔 소스를 컴파일해서 설치할 필요 없이 패키지를 설치하면 되므로 설치에 관련해선 설명하지 않는다.

가. Dynamic Shared Object(DSO)

DSO는 아파치 모듈을 동적으로 적재하여 기능 확장이 가능하도록 한다. 이를 이용하면 아파치의 메모리 사용량을 줄일 수 있고, 언제라도 모듈을 추가하여 아파치 기능을 확장할 수 있다. 장점이 있으면, 단점도 있게 마련인데, 어느정도의 성능 감소가 있다. 모듈의 적재를 위한 약간의 오버헤드가 생기기 때문이다. 1998년 Ralf S. Engelschall(rse@apache.org)가 작성한 'Dynamic Shared Sbject(DSO) Support' 문서를 보면, 아파치 서버 시작시 약 20% 속도감소가 있고, 데몬 실행 중엔 약 5%의 속도 감소가 있다고 한다. 처음 서버 시작 속도는 처음 실행할 때의 문제이므로 크게 문제가 되지 않지만, 데몬 실행 중 5%의 속도 감소는 웹서버의 기능에 직접적인 영향을 미친다. 경우에 따라선 5%가 무시할 수 없는 손실일 수도 있다.

이런경우라면 DSO를 사용하지 않고, 원하는 모듈을 정적으로 컴파일하면 될 것이다. 그러나, 실제 배포판에 포함된 대다수의 바이너리 아파치 패키지는 이 DSO방식을 이용한다.

DSO 방식으로 아파치를 컴파일하면 최소한 두 개의 모듈은 정적으로 컴파일된다. http_core와 mod_so이다. http_core는 기능적인 것을 처리하는 모듈이고, mod_so는 DSO의 적재를 처리하는 모듈이다.

아파치 컴파일시 ./configure --enable-shared=max로 주고 컴파일한 후, httpd -l을 실행해 보면 실제로 확인할 수 있다. httpd -l은 정적으로 컴파일된 모듈의 리스트를 보여준다.

# ./configure --enable-shared=max

# httpd -l

동적으로 컴파일된 모듈은 .so라는 파일 이름을 갖게 된다. 이러한 모듈은 아파치의 설정 파일에서 LoadModule과 AddModule이라는 두 개의 지시자로 적재시킨다.

LoadModule access_module libexec/mod_access.so

AddModule mod_access.c

주의할 것은 AddModule 전에 LoadModule이 먼저 와야 한다는 것이다.

아파치가 DSO를 지원하도록 컴파일된 경우, 새로운 모듈을 언제라도 추가할 수 있다. 아파치는 이러한 것을 쉽게 처리할 수 있도록 apxs라는 도구를 제공하고 있다. 예를 들어 아파치 모듈 중 mod_access를 아파치 컴파일할 때 포함하지 않았다면, 이 apxs를 이용해서 추가할 수 있다. 컴파일은 다음처럼 한다.

# apxs -c mod_access.c

컴파일이 성공적으로 이뤄지면, mod_access.so라는 정적 모듈 라이브러리가 만들어진다. 이것을 설치하는 것은 다음과 같다.

# apxs -i -n -a mod_access.so

설치된 모듈의 테스트는 apachectl configtest를 통해 할 수 있다.

# apachectl configtest

apachectl configtest는 실제 데몬을 띄우는 것이 아니라 아파치의 설정 파일인 httpd.conf의 문법적 오류를 찾아준다.

DSO를 이용하면 PHP나 MySQL 또는 mod_ssl등과 같은 많은 모듈을 언제라도 추가할 수 있다. PHP의 경우, 새로운 버전이 발표될 때마다 아파치를 새로 컴파일할 필요 없이 PHP 모듈만 apxs를 이용해서 컴파일하면 되기 때문이다.

나. 아파치 설치하기

이제 아파치 소스를 이용해서 설치해 보도록 하자. 아파치의 홈페이지(www.apache.org) 또는 ftp 싸이트(ftp://ftp.apache.org/dist)에서 소스를 다운로드 받는다. 아파치의 최신 안정 버전은 1.3.14이다. 개발 버전으로 2.0이 테스트 중에 있다. 안정버전을 이용해서 설치한다.

소스를 다운로드 받았으면 적당한 디렉토리에 압축을 풀고, ./configure을 통해 컴파일 환경 설정을 해주어야 한다.

# tar xvfz apache_1.3.14.tar.gz

또는

# gzip -cd apache_1.3.14.tar.gz | tar xvf -

압축을 풀면 apache_1.3.14라는 디렉토리가 생기고, 그 아래 아파치 소스가 풀린다. 이 apache_1.3.14로 가서 아래와 같이 컴파일 환경설정을 한다.

# cd apache_1.3.14

# ./configure --prefix=/usr/local/httpd --enable-rule=SHARED_CORE --enable-module=all --disable-module=auth_db

또는

# ./configure --prefix=/usr/local/httpd --enable-shared=max --enable-module=all --disable-module=auth_db

 

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

옵션         설명

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

--prefix=             아파치가 설치된 기본 경로를 뜻한다. 예를 들어

/usr/local/httpd      --prefix=/usr/local/apache라고 한다면, /usr/local/

                      apache 아래에 아파치 관련 디렉토리가 만들어지고

                      파일들이 놓이게 된다.

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

--enable-rule=        DSO로 아파치를 컴파일한다는 의미이다. 이렇게 하면

SHARED_CORE           아파치에서 기본으로 제공하는 모듈은 정적으로 컴파일한다.

                      따라서 별도의 동적 라이브러리를 갖지 않는다. 다만

                      아파치가 제공하지 않는 외부 모듈의 경우 DSO로 컴파일

                      할 수 있다.

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

--enable-module=all   아파치에서 제공하는 모든 라이브러리를 포함한다는

                      의미이다.

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

--disable-module=     버클리 db 라이브러리가 설치되어 있어야 하는데, 없는

auth_db               경우도 있으므로 이모듈은 컴파일에서 제외하는 것이다.

                      없어도 무관한 것이니 제외 시켜도 좋다.

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

--enable-shared=      DSO로 아파치를 컴파일하는데, 제공하는 모듈을 아파치

max                   코어에 포함시키지 않고 동적라이브러리로 컴파일해 놓는다.

                      컴파일된 라이브러리는 libexec에 놓이게 된다. 파일명.so

                      로 된 파일들을 볼 수 있을 것이다.

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

--enable-rule=SHARED_CORE와 --enable-shared=max의 차이라고 한다면, 전자의 경우는 컴파일시에 지정한 모듈에 코어 파일이 포함되어 이후 모듈 선택의 여지가 없다는 것이다. 그러나 후자의 경우엔 httpd.conf에서 개별 모듈의 사용여부를 결정할 수 있다. 어떤 것을 선택하든 그것은 여러분의 몫이다.

./configure를 통해 컴파일 환경을 만들면 그 결과로 Makefile 파일이 만들어진다. 이 Makefile을 가지고 컴파일과 설치를 하게 된다. 다음과 같이 실행하면 된다.

# make

# make install

make로 컴파일하고, make install은 설치하는 것이다. prefix를 통해 지정해 준 경로로 가보면 아래와 같은 디렉토리가 만들어져 있을 것이다.

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

디렉토리     설명

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

bin          아파치 실행 파일이 위치한다.(apachectl, axps, httpd, ...)

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

cgi-bin      CGI 파일이 위치한다.

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

conf         아파치 설정 파일이 위치한다.(httpd.conf, ...)

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

htdocs       웹문서가 위치한다.

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

icons        웹문서에서 사용할 아이콘이 위치한다.

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

include      아파치를 이용하는 프로그램의 컴파일을 위한 아파치 헤더파일이

             위치한다.

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

libexec      모듈 파일이 위치한다.

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

logs         아파치의 로그 파일이 위치한다.

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

man          아파치의 맨페이지 파일이 위치한다.

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

proxy        아파치의 프록시를 위한 파일이 위치한다.

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

 

다. 아파치 실행

아파치를 설치하면 기본적인 설정 파일이 만들어진다. conf/httpd.conf에 보면 상세한 설명과 함께 기본적인 설정이 되어 있다. conf/httpd.conf를 보면 아래와 같은 부분이 있다. 일반적으로 http 포트는 80으로 정의 되어 있다. 아래 주석에서 보는 것과 같이 1023이하의 포트는 루트만이 접근 가능하다. 만약 포트 번호 80을 사용하고자 한다면, 아파치를 루트 권한으로 실행해야 한다. 그렇지 않고 기본으로 주어진 8080으로 사용한다면, 루트가 아닌 일반 사용자 계정으로도 아파치를 실행할 수 있다. 단 접속시 항상 포트 번호를 명시해 주어야 한다.

 

# port: The port to which the standalone server listens. For

# port < 1023, you will need httpd to be run as root initially.

Port 8080

그리고 포트 8080을 사용한다면, /etc/services에 아래와 같은 부분이 있어야 한다. 만약 없다면 추가해 준다.

 

www 8080/tcp http # WorldWideWeb HTTP

www 8080/udp # HyperText Transfer Protocol

위에 주어진 대로 bin/apachectl start로 아파치를 실행한다.

 

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

명령               설명

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

apachectl start       httpd 시작

apachectl stop        httpd 중지

apachectl restart     httpd 재시작

apachectl graceful    httpd 실행중이면 재시작하고, 실행중이 아니면 시작한다.

apachectl configtest  설정 파일 문법 테스트

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

성공적으로 시작되었다는 메시지가 나타나면 넷스케이프를 통해 확인할 수 있다. URL에 http://localhost:8080라고 하면, 현재 아파치에 대한 초기화면을 볼 수 있다. 만약 외부에서 확인하고자 한다면, URL에 http://당신의 도메인:8080이라고 하면 된다. 만약, 포트번호 80을 사용한다면, httpd.conf와 /etc/services의 8080을 80으로만 수정해 주면 된다. 그리고 URL에서는 포트번호를 써줄 필요가 없다.

만약, 현재 호스트가 DNS에 등록되어 있지 않거나 서버 명을 알수 없는 경우 아파치가 제대로 실행되지 않을 수도 있다. 이런 경우를 위해 아파치는 강제로 서버명을 지정해 줄 수 있다. conf/httpd.conf에서 다음 부분을 수정하면 된다. 아래와 같이 ServerName 127.0.0.1과 같이 루프백으로 지정하거나 IP로 지정할 수 있다.

 

# 127.0.0.1 is the TCP/IP local loop-back address, often named localhost. You

# machine always knows itself by this address. If you use Apache strictly for

# local testing and development, you may use 127.0.0.1 as the server name.

#

ServerName 127.0.0.1

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.