본문으로 건너뛰기
Advertisement

Apache 모듈 시스템

Apache의 강점 중 하나는 모듈 기반 확장성 입니다. 필요한 기능만 모듈로 활성화하여 사용할 수 있으며, 동적 모듈(DSO)을 사용하면 Apache를 재컴파일하지 않고도 모듈을 추가·제거할 수 있습니다.


모듈 시스템 개요

Apache 모듈은 두 가지 방식으로 포함됩니다.

방식설명특징
정적 컴파일컴파일 시 Apache 바이너리에 내장빠름, 변경 불가
동적 로딩(DSO)LoadModule로 런타임에 로딩유연함, 필요시 로딩
# 현재 로딩된 모듈 목록 확인
apache2ctl -M
# 또는
httpd -M

# 출력 예시:
# core_module (static)
# rewrite_module (shared) ← 동적 모듈
# ssl_module (shared)

Ubuntu의 모듈 관리 명령 (a2enmod / a2dismod)

Ubuntu/Debian은 모듈 활성화·비활성화를 위한 편리한 명령을 제공합니다.

# 모듈 활성화
sudo a2enmod rewrite # mod_rewrite 활성화
sudo a2enmod ssl # mod_ssl 활성화
sudo a2enmod headers # mod_headers 활성화
sudo a2enmod expires # mod_expires 활성화
sudo a2enmod proxy # mod_proxy 활성화
sudo a2enmod proxy_http # mod_proxy_http 활성화

# 모듈 비활성화
sudo a2dismod rewrite

# 활성화 후 반드시 리로드
sudo systemctl reload apache2

# 사용 가능한 모듈 목록
ls /etc/apache2/mods-available/

# 활성화된 모듈 목록
ls /etc/apache2/mods-enabled/

CentOS/RHEL의 모듈 관리

CentOS에서는 /etc/httpd/conf.modules.d/ 디렉터리의 설정 파일에서 모듈을 관리합니다.

# 모듈 설정 디렉터리 확인
ls /etc/httpd/conf.modules.d/
# 00-base.conf
# 00-mpm.conf
# 00-optional.conf
# 00-proxy.conf
# 00-ssl.conf
# /etc/httpd/conf.modules.d/00-optional.conf 예시
# 주석 해제로 모듈 활성화
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
# LoadModule userdir_module modules/mod_userdir.so ← 비활성화

주요 모듈 목록과 역할

핵심 모듈

모듈역할기본 활성화
mod_coreApache 핵심 기능항상
mod_log_config로그 설정
mod_mimeMIME 타입 설정
mod_dir디렉터리 인덱스
mod_aliasURL 별칭, 리다이렉트
mod_env환경 변수 설정

URL 처리 모듈

모듈역할설치 명령
mod_rewriteURL 재작성·리다이렉트a2enmod rewrite
mod_aliasAlias, Redirect 지시어기본 활성화
mod_redirects간단한 리다이렉트a2enmod redirects

프록시 모듈

모듈역할설치 명령
mod_proxy기본 프록시 기능a2enmod proxy
mod_proxy_httpHTTP 프록시a2enmod proxy_http
mod_proxy_ajpAJP 프록시 (Tomcat 연동)a2enmod proxy_ajp
mod_proxy_balancer로드밸런서a2enmod proxy_balancer
mod_proxy_wstunnelWebSocket 프록시a2enmod proxy_wstunnel

보안 모듈

모듈역할설치 명령
mod_sslHTTPS/TLS 지원a2enmod ssl
mod_auth_basicHTTP Basic 인증a2enmod auth_basic
mod_auth_digestHTTP Digest 인증a2enmod auth_digest
mod_authn_file파일 기반 인증기본 활성화
mod_authz_hostIP 기반 접근 제어기본 활성화
mod_headersHTTP 헤더 조작a2enmod headers
mod_evasiveDDoS 기초 방어apt install libapache2-mod-evasive

성능 모듈

모듈역할설치 명령
mod_deflateGzip 압축a2enmod deflate
mod_expires캐시 만료 헤더a2enmod expires
mod_cache응답 캐싱a2enmod cache
mod_cache_disk디스크 캐시a2enmod cache_disk
mod_http2HTTP/2 지원a2enmod http2

콘텐츠 처리 모듈

모듈역할설치 명령
mod_phpPHP 내장 실행 (Prefork MPM)apt install libapache2-mod-php
mod_cgiCGI 스크립트 실행a2enmod cgi
mod_cgidCGI (Worker/Event MPM)a2enmod cgid
mod_fastcgiFastCGI 지원apt install libapache2-mod-fastcgi

모듈 설정 예제

mod_rewrite — URL 재작성

# VirtualHost 또는 .htaccess에서 사용
RewriteEngine On

# 모든 HTTP를 HTTPS로
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

mod_proxy + mod_proxy_http — 리버스 프록시

# 필요한 모듈 로딩
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<VirtualHost *:80>
ProxyPreserveHost On

# /api/ 요청을 Tomcat으로 프록시
ProxyPass /api/ http://127.0.0.1:8080/api/
ProxyPassReverse /api/ http://127.0.0.1:8080/api/
</VirtualHost>

mod_headers — 보안 헤더

# 필요한 모듈 로딩
LoadModule headers_module modules/mod_headers.so

<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Strict-Transport-Security "max-age=31536000"
</IfModule>

mod_deflate — Gzip 압축

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json
DeflateCompressionLevel 6
</IfModule>

mod_expires — 캐시 만료 헤더

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
</IfModule>

mod_http2 — HTTP/2 활성화

# Apache 2.4.17+, mod_ssl 필요
Protocols h2 http/1.1

<VirtualHost *:443>
ServerName example.com
SSLEngine on
Protocols h2 http/1.1
# ... SSL 설정
</VirtualHost>

모듈 문제 진단

# 특정 모듈 로딩 여부 확인
apache2ctl -M | grep rewrite
# rewrite_module (shared) ← 활성화됨
# (없으면 비활성화)

# 설정 파일에서 모듈 의존성 확인
grep -r "RewriteEngine" /etc/apache2/sites-enabled/
# RewriteEngine 사용하는 사이트에 mod_rewrite 활성화 필요

# 모듈 활성화 안 된 상태에서 사용 시 에러 로그
# Invalid command 'RewriteEngine', perhaps misspelled or defined by a module
# not included in the server configuration

정리

  • Ubuntu: a2enmod 모듈명 / a2dismod 모듈명 + systemctl reload apache2
  • CentOS: conf.modules.d/ 파일에서 LoadModule 주석 해제·추가
  • 실무 필수 모듈: mod_rewrite, mod_ssl, mod_headers, mod_deflate, mod_expires, mod_proxy, mod_proxy_http
  • 모듈 추가 후 반드시 configtest로 문법 검증 후 리로드
Advertisement