1. 설치
아래 스크립트는 Apache HTTP Server 2.2.26을 소스에서 내려받아 빌드하고, 서비스·로그·데이터 디렉터리를 준비하는 예시입니다. 실행 환경에 따라 디렉터리 경로, 사용자 계정, JDK 경로, 패키지 이름이 다를 수 있으니 그대로 실행하기 전에 변수 값을 먼저 확인하는 것이 좋습니다.
참고로 Apache HTTP Server 2.2 계열은 현재 유지보수가 종료된 오래된 버전입니다. 운영 환경에서는 가능한 한 지원 중인 버전을 검토하고, 이 글의 내용은 기존 환경을 재현하거나 과거 설치 절차를 이해하기 위한 참고 자료로 보는 편이 안전합니다.
#!/bin/bash
## Common Variable
export SVC_DIR=/svc1
export LOG_DIR=/log1
export DAT_DIR=/dat1
export REP_DIR=/Downloads
export HTTP_USER=httpuser
export HTTP_VER=2.2.26
export JAVA_HOME=/usr/java7_51
if [ -e /etc/centos-release ]; then
export INSTALLER=yum
elif [ -e /etc/lsb-release ]; then
export INSTALLER=apt-get
else
export INSTALLER=yum
fi
## Create Directory
mkdir -p ${SVC_DIR}/http
mkdir -p ${LOG_DIR}/http
mkdir -p ${DAT_DIR}/http
## Install Package
${INSTALLER} -y install ant
${INSTALLER} -y install gcc
${INSTALLER} -y install apr-util-devel
${INSTALLER} -y install openssl-devel
## Set Variable
HTTP_SVC_DIR=${SVC_DIR}/http
HTTP_LOG_DIR=${LOG_DIR}/http
FILE_NAME=httpd-2.2.26
## Download HTTP Server
mkdir ${REP_DIR}/http
cd ${REP_DIR}/http
wget http://mirror.apache-kr.org//httpd/${FILE_NAME}.tar.gz
gzip -d ${FILE_NAME}.tar.gz
tar -xvf ${FILE_NAME}.tar
## Compile HTTP Server
cd ${FILE_NAME}
./configure \
--prefix=${HTTP_SVC_DIR}/${HTTP_VER} \
--enable-modules=all \
--enable-mods-shared=most \
--with-mpm=worker \
--enable-proxy \
--enable-proxy-http \
--enable-proxy-connect \
--enable-cache \
--enable-mem-cache \
--enable-disk-cache \
--enable-deflate \
--enable-ssl \
--with-ssl=/usr/include/openssl
make
make install
## Post Work
mkdir -p ${HTTP_SVC_DIR}/${HTTP_VER}/servers
mkdir -p ${HTTP_LOG_DIR}/${HTTP_VER}/servers
chown -R ${HTTP_USER}:${HTTP_USER} ${HTTP_SVC_DIR}/${HTTP_VER}
chown -R ${HTTP_USER}:${HTTP_USER} ${HTTP_LOG_DIR}/${HTTP_VER}
설치 후에는 바이너리가 정상적으로 생성되었는지 먼저 확인합니다. 예를 들어 설치 경로 아래의 bin/httpd가 존재하는지 확인하고, 설정 파일 문법 검사는 httpd -t 방식으로 수행할 수 있습니다. 실제 기동 전에는 conf/httpd.conf의 포트, 사용자, 로그 경로, 모듈 로딩 여부를 함께 점검하는 것이 좋습니다.
2. 주요 빌드 옵션
Apache HTTP Server 빌드 옵션 중 자주 확인하게 되는 몇 가지만 정리합니다.
--enable-mods-shared=most
DSO(Dynamic Shared Object) 방식으로 대부분의 모듈을 공유 객체, 즉 .so 파일로 빌드해 설치합니다. 정적으로 포함하는 방식은 특정 모듈을 추가하려면 다시 빌드해야 하는 경우가 많지만, DSO 방식은 필요한 모듈을 빌드한 뒤 설정에서 로드하는 식으로 비교적 유연하게 운영할 수 있습니다.
--with-mpm=worker
MPM(Multi-Processing Module)을 선택하는 옵션입니다. Apache HTTP Server 2.2에서는 대표적으로 prefork와 worker를 많이 사용하며, 기본값은 일반적으로 prefork입니다. worker는 프로세스와 스레드를 함께 사용하는 방식이고, prefork는 스레드를 사용하지 않는 다중 프로세스 방식입니다. httpd-mpm.conf 설정에 대해서는 조만간 따로 한번 이야기를 해봐야겠지요.
--enable-ssl
HTTPS 처리를 위한 SSL/TLS 모듈을 빌드합니다. 이 옵션을 사용하려면 OpenSSL 헤더와 라이브러리가 필요하므로, 아래의 필요 패키지 항목처럼 openssl-devel 계열 패키지가 설치되어 있어야 합니다.
--enable-deflate
응답 압축을 위한 mod_deflate를 활성화합니다. 빌드 과정에서 zlib 관련 헤더를 찾지 못하면 configure 단계에서 실패할 수 있습니다.
3. 필요 패키지
다음은 configure 수행 시 발생할 수 있는 오류와 그때 확인할 패키지입니다. 배포판에 따라 패키지 이름은 조금씩 다를 수 있으며, CentOS/RHEL 계열과 Debian/Ubuntu 계열의 이름이 다를 수 있습니다.
checking whether the C compiler works... no configure: error: in `/Downloads/http/httpd-2.2.26': configure: error: C compiler cannot create executables
-> C 컴파일러가 없어 발생하는 오류입니다. gcc 패키지를 설치합니다.
checking for zlib location... not found checking whether to enable mod_deflate... configure: error: mod_deflate has been requested but can not be built due to prerequisite failures
-> zlib 개발 헤더를 찾지 못한 경우입니다. CentOS/RHEL 계열에서는 zlib-devel 패키지를 확인합니다.
no SSL-C headers found configure: error: ...No recognized SSL/TLS toolkit detected
-> OpenSSL 개발 헤더를 찾지 못한 경우입니다. openssl-devel 패키지를 설치합니다.
패키지를 설치한 뒤에는 이전 configure 결과가 남아 있지 않도록 빌드 디렉터리 상태를 확인하고, 다시 ./configure부터 수행합니다. 오류 메시지는 대부분 필요한 헤더나 라이브러리를 직접 알려주므로, 마지막 몇 줄뿐 아니라 그보다 앞선 checking for ... 부분까지 함께 보는 것이 원인 파악에 도움이 됩니다.