Linux Apache 서버 구성 실습 1

Linux Apache 서버 구성 실습 1입니다. Apache 2.4 소스 컴파일, APR 배치, /app/apache 설치, systemd 등록, DocumentRoot 변경과 configtest 검증을 정리했습니다.

Linux Apache 서버 구성 실습 1: 소스 컴파일 설치와 기본 DocumentRoot

Apache HTTP Server는 Linux에서 가장 오래 쓰인 웹 서버 중 하나다. 운영 서버에서는 배포판 패키지의 httpd 또는 apache2를 사용하는 것이 보안 업데이트와 서비스 관리 면에서 보통 더 낫다. 다만 예시처럼 소스 컴파일 과정을 직접 해 보면 Apache가 어떤 파일 구조로 설치되고, httpd.confDocumentRoot가 어떻게 동작하는지 이해하기 좋다.

Apache 2.4 소스 컴파일 실습을 기준으로 한다. 2026년 6월 23일 현재 Apache HTTP Server 최신 GA는 2.4.68이다. 실제 작업 전에는 공식 다운로드 페이지에서 최신 버전과 checksum을 확인한다.

1. 빌드 도구 설치

sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y \
 wget \
 tar \
 gzip \
 bzip2 \
 perl \
 pcre2-devel \
 expat-devel \
 openssl-devel \
 libxml2-devel

CentOS 7 계열이라면 yum groupinstall "Development Tools"처럼 명령이 달라질 수 있다. 오래된 OS에서는 최신 Apache를 빌드하기 위한 OpenSSL, PCRE2, 컴파일러 버전이 부족할 수 있다.

2. 소스 다운로드

cd /usr/local/src

HTTPD_VERSION="2.4.68"
APR_VERSION="1.7.6"
APR_UTIL_VERSION="1.6.3"

sudo wget "https://downloads.apache.org/httpd/httpd-${HTTPD_VERSION}.tar.gz"
sudo wget "https://downloads.apache.org/apr/apr-${APR_VERSION}.tar.gz"
sudo wget "https://downloads.apache.org/apr/apr-util-${APR_UTIL_VERSION}.tar.gz"

ls -lh httpd-*.tar.gz apr-*.tar.gz

운영 환경에서는 checksum과 서명을 검증한다. 랩에서도 다운로드 출처를 임의 블로그나 파일 공유 도구로 바꾸지 않는 편이 좋다.

3. 압축 해제와 APR 배치

cd /usr/local/src

sudo tar xzf "httpd-${HTTPD_VERSION}.tar.gz"
sudo tar xzf "apr-${APR_VERSION}.tar.gz"
sudo tar xzf "apr-util-${APR_UTIL_VERSION}.tar.gz"

sudo mv "apr-${APR_VERSION}" "httpd-${HTTPD_VERSION}/srclib/apr"
sudo mv "apr-util-${APR_UTIL_VERSION}" "httpd-${HTTPD_VERSION}/srclib/apr-util"

4. configure, make, install

실습은 /app/apache 경로에 설치했다. 같은 경로를 사용하려면 먼저 디렉터리를 만들고 컴파일한다.

sudo mkdir -p /app
sudo chown root:root /app

cd "/usr/local/src/httpd-${HTTPD_VERSION}"

sudo ./configure \
 --prefix=/app/apache \
 --enable-so \
 --enable-ssl \
 --enable-rewrite \
 --with-included-apr \
 --with-mpm=event

sudo make -j"$(nproc)"
sudo make install

5. 주요 파일 확인

/app/apache/bin/httpd -v
/app/apache/bin/apachectl -V

ls -l /app/apache/bin/httpd
ls -l /app/apache/bin/apachectl
ls -l /app/apache/conf/httpd.conf
ls -l /app/apache/htdocs/index.html
경로역할
/app/apache/bin/httpdApache 실행 바이너리
/app/apache/bin/apachectl관리 스크립트
/app/apache/conf/httpd.conf메인 설정 파일
/app/apache/htdocs기본 DocumentRoot
/app/apache/logsaccess_log, error_log 위치

6. ServerName과 설정 문법 확인

sudo cp -a /app/apache/conf/httpd.conf /app/apache/conf/httpd.conf.bak.$(date +%Y%m%d%H%M%S)

echo "ServerName localhost" | sudo tee -a /app/apache/conf/httpd.conf

sudo /app/apache/bin/apachectl configtest
sudo /app/apache/bin/httpd -t

Syntax OK가 나와야 기동 전에 최소한의 설정 문법이 맞는 상태다.

7. systemd 서비스 등록

예전 방식처럼 rc.local에 넣을 수도 있지만, 현재 Linux에서는 systemd unit으로 등록하는 편이 관리하기 쉽다.

sudo tee /etc/systemd/system/apache-custom.service >/dev/null <<'EOF'
[Unit]
Description=Custom Apache HTTP Server
After=network.target

[Service]
Type=simple
ExecStart=/app/apache/bin/httpd -DFOREGROUND
ExecReload=/app/apache/bin/apachectl graceful
ExecStop=/app/apache/bin/apachectl graceful-stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now apache-custom
sudo systemctl status apache-custom --no-pager

8. 방화벽과 접속 테스트

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

curl -I http://127.0.0.1/
curl http://127.0.0.1/ | head

9. DocumentRoot 변경

예시처럼 웹 문서 디렉터리를 /home/httpd/html로 분리한다. 바이너리와 설정 파일이 있는 경로를 웹 문서 루트로 같이 쓰지 않는 것이 좋다.

sudo mkdir -p /home/httpd/html
echo "hello from custom DocumentRoot" | sudo tee /home/httpd/html/index.html
sudo chown -R daemon:daemon /home/httpd/html
sudo chmod -R 755 /home/httpd

httpd.confDocumentRootDirectory 블록을 다음처럼 맞춘다.

DocumentRoot "/home/httpd/html"

<Directory "/home/httpd/html">
 Options Indexes FollowSymLinks
 AllowOverride None
 Require all granted
</Directory>

변경 후 반드시 문법 검사와 reload를 한다.

sudo /app/apache/bin/apachectl configtest
sudo systemctl reload apache-custom
curl http://127.0.0.1/

정리

Apache 소스 컴파일 실습은 빌드 도구 설치, APR 배치, configure option, 설치 경로, httpd.conf, systemd 등록, DocumentRoot 변경까지 이어서 봐야 의미가 있다. 운영 서버에서는 배포판 패키지로 보안 업데이트를 받는 것이 일반적이지만, 소스 설치를 직접 해 보면 Apache의 파일 구조와 설정 흐름을 더 명확하게 이해할 수 있다.

문서 링크

BGM EVER