Apache HTTPD 설치와 기본 환경 구성
Apache HTTPD(이하 Apache)는 세계에서 가장 오랜 역사를 가진 웹서버 중 하나입니다. 다양한 운영 체제를 지원하며 모듈 기반 확장성이 뛰어납니다. 이 장에서는 Ubuntu·CentOS·Windows·Docker 환경별 설치 방법과 디렉터리 구조, MPM(Multi-Processing Module) 선택, 서비스 관리 명령을 다룹니다.
MPM(Multi-Processing Module) 이해
Apache를 설치하기 전에 MPM을 먼저 이해해야 합니다. MPM은 Apache가 요청을 어떻게 병렬 처리할지 결정하는 핵심 모듈입니다.
| MPM | 방식 | 특징 | 권장 환경 |
|---|---|---|---|
| Prefork | 멀티 프로세스 (스레드 없음) | 각 요청에 독립 프로세스 할당, 안정적, mod_php 호환 | PHP + mod_php |
| Worker | 멀티 프로세스 + 멀티 스레드 | 메모리 효율 향상, 스레드 안전 모듈 필요 | 중간 규모 |
| Event | Worker 개선 (비동기 Keep-Alive) | Keep-Alive 연결을 별도 스레드로 관리, 고성능 | ** 현재 권장** |
# 현재 사용 중인 MPM 확인
apache2ctl -V | grep MPM
# 또는
httpd -V | grep MPM
Ubuntu / Debian 설치
# 패키지 목록 업데이트
sudo apt update
# Apache2 설치
sudo apt install -y apache2
# 서비스 시작 및 자동 시작 등록
sudo systemctl start apache2
sudo systemctl enable apache2
# 상태 확인
sudo systemctl status apache2
설치 후 http://서버IP에 접속하면 "Apache2 Ubuntu Default Page"가 표시됩니다.
MPM 변경 (Prefork → Event)
# 현재 활성화된 MPM 확인
ls /etc/apache2/mods-enabled/ | grep mpm
# Prefork 비활성화, Event 활성화
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
# 재시작 적용
sudo systemctl restart apache2
# 확인
apache2ctl -V | grep MPM
# Server MPM: event
SSL 모듈 활성화
# HTTPS 지원을 위한 SSL 모듈 활성화
sudo a2enmod ssl
sudo systemctl reload apache2
CentOS / RHEL / Rocky Linux 설치
# httpd 설치
sudo yum install -y httpd
# 서비스 시작 및 자동 시작 등록
sudo systemctl start httpd
sudo systemctl enable httpd
# 방화벽에서 HTTP/HTTPS 허용
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
MPM 설정 (CentOS)
CentOS에서는 /etc/httpd/conf.modules.d/00-mpm.conf에서 MPM을 설정합니다.
# /etc/httpd/conf.modules.d/00-mpm.conf
# 원하는 MPM만 주석 해제, 나머지는 주석 처리
# LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so
macOS 설치 (Homebrew)
# Homebrew로 설치
brew install httpd
# 서비스 시작 (포트 8080 기본)
brew services start httpd
# 설정 파일 위치
# /opt/homebrew/etc/httpd/httpd.conf (Apple Silicon)
# /usr/local/etc/httpd/httpd.conf (Intel)
Windows 설치
Windows에서 Apache를 직접 설치하거나 XAMPP, WampServer 같은 패키지를 사용합니다.
XAMPP 사용 (권장)
- https://www.apachefriends.org에서 XAMPP 다운로드
- 설치 후 XAMPP Control Panel에서 Apache 시작
- 설정 파일 위치:
C:\xampp\apache\conf\httpd.conf
직접 설치 (MSI)
# Apache Lounge (https://www.apachelounge.com/download/) 에서 Win64 zip 다운로드
# C:\Apache24 에 압축 해제
# Windows 서비스로 등록
C:\Apache24\bin\httpd.exe -k install
# 서비스 시작
net start Apache2.4
# 설정 파일: C:\Apache24\conf\httpd.conf
Docker로 Apache 실행
# 최신 버전 실행
docker run -d --name apache -p 80:80 httpd
# 설정 파일과 웹 루트 마운트
docker run -d \
--name apache \
-p 80:80 \
-v $(pwd)/httpd.conf:/usr/local/apache2/conf/httpd.conf:ro \
-v $(pwd)/html:/usr/local/apache2/htdocs:ro \
httpd
# 컨테이너에서 설정 리로드
docker exec apache apachectl graceful
docker-compose.yml 예시:
version: '3.8'
services:
apache:
image: httpd:2.4-alpine
container_name: apache
ports:
- "80:80"
- "443:443"
volumes:
- ./conf/httpd.conf:/usr/local/apache2/conf/httpd.conf:ro
- ./conf/extra:/usr/local/apache2/conf/extra:ro
- ./html:/usr/local/apache2/htdocs:ro
restart: unless-stopped
Apache 디렉터리 구조
Ubuntu/Debian 기준
/etc/apache2/ ← 설정 파일 루트
apache2.conf ← 메인 설정 파일
ports.conf ← 리슨 포트 설정
envvars ← 환경 변수 설정
conf-available/ ← 추가 설정 (비활성 포함)
conf-enabled/ ← 활성화된 추가 설정 (심볼릭 링크)
mods-available/ ← 사용 가능한 모듈
mods-enabled/ ← 활성화된 모듈 (심볼릭 링크)
sites-available/ ← 가상 호스트 설정 (비활성 포함)
000-default.conf ← 기본 가상 호스트
default-ssl.conf ← 기본 SSL 가상 호스트
sites-enabled/ ← 활성화된 가상 호스트 (심볼릭 링크)
/var/www/html/ ← 기본 웹 루트
/var/log/apache2/ ← 로그 디렉터리
access.log
error.log
/usr/sbin/apache2 ← Apache 실행 파일
/usr/sbin/apache2ctl ← Apache 제어 스크립트
CentOS/RHEL 기준
/etc/httpd/
conf/
httpd.conf ← 메인 설정 파일
conf.d/ ← 추가 설정 파일 (*.conf 자동 로딩)
ssl.conf
welcome.conf
conf.modules.d/ ← 모듈 로딩 설정
00-base.conf
00-mpm.conf
00-ssl.conf
/var/www/html/ ← 기본 웹 루트
/var/log/httpd/ ← 로그 디렉터리
access_log
error_log
/usr/sbin/httpd ← Apache 실행 파일
Apache 서비스 관리 명령
systemctl 명령
sudo systemctl start apache2 # 시작 (Ubuntu)
sudo systemctl start httpd # 시작 (CentOS)
sudo systemctl stop apache2 # 중지
sudo systemctl restart apache2 # 재시작 (연결 끊김 발생)
sudo systemctl reload apache2 # 설정 리로드 (graceful, 권장)
sudo systemctl status apache2 # 상태 확인
sudo systemctl enable apache2 # 부팅 시 자동 시작 등록
apachectl / apache2ctl 명령
sudo apache2ctl start # 시작
sudo apache2ctl stop # 중지
sudo apache2ctl restart # 재시작
sudo apache2ctl graceful # 처리 중인 요청 완료 후 재시작 (무중단)
sudo apache2ctl graceful-stop # 처리 중인 요청 완료 후 종료
sudo apache2ctl configtest # 설정 파일 문법 검사
sudo apache2ctl -V # 버전 및 컴파일 옵션 확인
sudo apache2ctl -M # 활성화된 모듈 목록
sudo apache2ctl -S # 가상 호스트 설정 요약
핵심: 설정 변경 후
restart대신graceful을 사용하세요.graceful은 처리 중인 요청이 완료된 후 워커를 교체하여 무중단으로 설정을 적용합니다.
설치 확인
# Apache 버전 확인
apache2 -v # Ubuntu
httpd -v # CentOS
# 컴파일 옵션 확인
apache2ctl -V
# 설정 파일 문법 검사
sudo apache2ctl configtest
# Syntax OK
# 80 포트 리슨 확인
sudo ss -tlnp | grep :80
정리
| 항목 | Ubuntu | CentOS | 비고 |
|---|---|---|---|
| 패키지명 | apache2 | httpd | 같은 소프트웨어 |
| 설정 루트 | /etc/apache2/ | /etc/httpd/ | 구조 다름 |
| 웹 루트 | /var/www/html/ | /var/www/html/ | 동일 |
| 로그 | /var/log/apache2/ | /var/log/httpd/ | 다름 |
| 제어 명령 | apache2ctl | apachectl | 동일 기능 |
| 권장 MPM | Event | Event | 성능 최적 |