본문으로 건너뛰기
Advertisement

httpd.conf 구조 완전 분석

httpd.conf는 Apache의 모든 동작을 제어하는 핵심 설정 파일입니다. Nginx의 nginx.conf와 비슷한 역할을 하지만 구조와 지시어 체계가 다릅니다. 전역 설정, Directory·Files·Location 컨테이너, AllowOverride의 의미를 완전히 이해해봅시다.


httpd.conf 전체 구조

Apache 설정 파일은 크게 세 부분으로 나뉩니다.

# ============================================================
# 섹션 1: 전역 환경 설정
# ============================================================
ServerRoot "/etc/apache2"
Listen 80
ServerName www.example.com:80
ServerAdmin webmaster@example.com

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule ssl_module modules/mod_ssl.so

User www-data
Group www-data

ServerTokens Prod
ServerSignature Off

# ============================================================
# 섹션 2: 기본 서버 설정 (메인 서버)
# ============================================================
DocumentRoot "/var/www/html"

<Directory />
Options None
AllowOverride None
Require all denied
</Directory>

<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

<Files ".ht*">
Require all denied
</Files>

# ============================================================
# 섹션 3: 가상 호스트 (VirtualHost)
# ============================================================
Include /etc/apache2/sites-enabled/*.conf

전역 설정 주요 지시어

# Apache 설정 파일의 기준 디렉터리
# 상대 경로는 이 경로를 기준으로 해석됨
ServerRoot "/etc/apache2"

# 리슨 포트 설정
# 여러 포트 동시 리슨 가능
Listen 80
Listen 443

# 서버의 공식 이름 (Host 헤더 기본값, 리다이렉트에 사용)
ServerName www.example.com

# 에러 메시지에 표시할 관리자 이메일
ServerAdmin webmaster@example.com

# 응답 헤더에 서버 정보 노출 수준
# Prod: "Apache" 만 표시 (보안 권장)
# Full: 버전 + OS + 모듈 정보 노출 (기본값, 위험)
ServerTokens Prod

# 에러 페이지에 서버 서명 표시 여부
ServerSignature Off

# 최대 동시 연결 수
MaxRequestWorkers 150

# Keep-Alive 설정
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

Directory 컨테이너

Directory 컨테이너는 특정 파일 시스템 경로 에 적용할 설정을 정의합니다.

# 루트 디렉터리 — 기본적으로 모든 접근 차단
<Directory />
Options None
AllowOverride None
Require all denied
</Directory>

# 웹 루트 — 접근 허용
<Directory "/var/www/html">
# Options: 이 디렉터리에서 허용할 기능
# Indexes: 디렉터리 인덱스 자동 생성 (파일 목록 표시)
# FollowSymLinks: 심볼릭 링크 허용
# ExecCGI: CGI 스크립트 실행 허용
# None: 아무 옵션도 허용 안 함
Options Indexes FollowSymLinks

# AllowOverride: .htaccess에서 재정의할 수 있는 지시어 범위
# None: .htaccess 완전 비활성화 (성능 향상)
# All: 모든 지시어 허용
# AuthConfig: 인증 관련 지시어만
# FileInfo: 파일 타입, 헤더 관련
# Indexes: 디렉터리 인덱스 관련
AllowOverride All

# Require: 접근 제어
# all granted: 모든 접근 허용
# all denied: 모든 접근 차단
# ip 192.168.1.0/24: 특정 IP 대역만 허용
Require all granted
</Directory>

# 특정 IP에서만 접근 가능한 디렉터리
<Directory "/var/www/admin">
Options None
AllowOverride None
Require ip 192.168.1.0/24
</Directory>

Options 지시어 정리

옵션설명보안 위험
Indexes디렉터리 파일 목록 자동 표시높음 (운영환경에서 제거 권장)
FollowSymLinks심볼릭 링크 따라가기중간
SymLinksIfOwnerMatch링크·대상 소유자 같을 때만 허용낮음
ExecCGICGI 스크립트 실행높음
MultiViews파일 확장자 자동 매핑낮음
None아무것도 허용 안 함없음 (권장)
All모든 옵션 허용높음 (운영환경 주의)

Files 컨테이너

Files 컨테이너는 특정 파일명 패턴 에 적용할 설정을 정의합니다.

# .htaccess, .htpasswd 등 숨김 파일 접근 차단
<Files ".ht*">
Require all denied
</Files>

# 특정 파일만 접근 허용 (정규식 사용)
<FilesMatch "\.(jpg|jpeg|png|gif|css|js)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

# 실행 파일 다운로드 차단
<FilesMatch "\.(exe|sh|bat|py)$">
Require all denied
</FilesMatch>

Location 컨테이너

Location 컨테이너는 특정 URL 경로 에 적용할 설정을 정의합니다. 파일 시스템과 무관하게 URL 기준으로 설정합니다.

# /api/ 경로에 프록시 설정 (Tomcat 연동)
<Location "/api/">
ProxyPass http://127.0.0.1:8080/api/
ProxyPassReverse http://127.0.0.1:8080/api/
</Location>

# /admin/ 경로에 접근 제어 + 인증
<Location "/admin/">
AuthType Basic
AuthName "관리자 전용"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>

# /server-status 상태 페이지 (내부만 접근)
<Location "/server-status">
SetHandler server-status
Require ip 127.0.0.1
</Location>

# /health 엔드포인트
<Location "/health">
SetHandler server-status
Require all granted
</Location>

Directory vs Files vs Location 비교

# Directory: 파일 시스템 경로 기준
<Directory "/var/www/html/images">
# /var/www/html/images/ 디렉터리와 하위에 적용
</Directory>

# Files: 파일명 패턴 기준 (어느 디렉터리에 있든)
<Files "secret.txt">
# 이름이 secret.txt인 모든 파일에 적용
</Files>

# Location: URL 경로 기준 (파일 시스템 무관)
<Location "/images/">
# URL이 /images/로 시작하는 모든 요청에 적용
</Location>
컨테이너기준와일드카드정규식
Directory파일 시스템 경로*, ?DirectoryMatch
Files파일명*, ?FilesMatch
LocationURL 경로*, ?LocationMatch

AllowOverride 심화

AllowOverride.htaccess 파일에서 사용할 수 있는 지시어 범위를 제어합니다.

# AllowOverride None — .htaccess 완전 비활성화 (운영 환경 권장)
# 이점: Apache가 .htaccess 파일을 읽으러 디렉터리를 탐색하지 않아 성능 향상
<Directory "/var/www/html">
AllowOverride None
</Directory>

# AllowOverride All — 모든 지시어 허용
<Directory "/var/www/html/app">
AllowOverride All
</Directory>

# AllowOverride 세분화 — 특정 범주만 허용
<Directory "/var/www/html/blog">
# AuthConfig: 인증/인가 지시어 허용 (AuthType, AuthName, Require)
# FileInfo: 파일 타입, 헤더, URL 재작성 허용
# Indexes: DirectoryIndex 등 인덱스 관련
# Limit: Allow, Deny, Order 허용
AllowOverride AuthConfig FileInfo
</Directory>

성능 주의: AllowOverride None으로 설정하면 Apache가 각 요청마다 .htaccess 파일을 디렉터리 트리를 거슬러 올라가며 찾지 않아 I/O가 줄어들고 응답 속도가 빨라집니다. 가능하면 .htaccess 대신 httpd.conf에 직접 설정하는 것이 좋습니다.


포함(Include) 지시어로 설정 분리

# 모듈 설정 포함
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

# 포트 설정
Include /etc/apache2/ports.conf

# 사이트(가상 호스트) 설정 포함
IncludeOptional /etc/apache2/sites-enabled/*.conf

# 추가 설정 포함
IncludeOptional /etc/apache2/conf-enabled/*.conf

IncludeIncludeOptional 차이:

  • Include: 파일이 없으면 에러
  • IncludeOptional: 파일이 없어도 무시 (유연한 배포에 적합)

정리

컨테이너역할주요 사용 사례
Directory파일 시스템 경로별 설정웹 루트 접근 제어, Options 설정
Files파일명 패턴별 설정특정 파일 차단, 캐시 헤더
LocationURL 경로별 설정프록시, 인증, 상태 페이지
AllowOverride.htaccess 권한 범위None(성능), All(유연성)
Advertisement