Nginx의 nginx.conf가 하나의 중앙 통제실이라면, 아파치(Apache)의 **httpd.conf**는 역사와 전통을 자랑하는 ‘중앙 행정 본부’입니다. Nginx가 “최소한의 설정으로 최고 속도를” 추구한다면, 아파치는 “모든 것을 설정할 수 있는 유연함”을 추구합니다.
다만 2025년 현재, 이 파일의 역할은 배포판(OS)에 따라 크게 다릅니다.
- 전통적인 방식 (RHEL, CentOS, 또는 소스 설치):
httpd.conf파일 하나에 모든 핵심 설정을 담는 ‘중앙집권형’입니다. - 현대적인 방식 (Ubuntu, Debian):
httpd.conf파일은 거의 비어있습니다. 대신 핵심 설정은apache2.conf에, 모듈은mods-enabled/에, 사이트 설정은sites-enabled/에 완벽하게 분산되어 있습니다.
이 가이드는 어떤 방식이든 공통적으로 알아야 할 **아파치의 ‘주요 지시어(Directives)’**들을 httpd.conf를 기준으로 완벽하게 해설합니다.
1. 📍 서버의 ‘신원’과 ‘위치’ (Global Settings)
파일의 가장 상단에 위치하며, 아파치 서버의 정체성을 정의합니다.
ServerRoot "/etc/httpd"
- 의미: 아파치 서버가 설치된 ‘최상위 디렉터리’입니다.
- 비유: 아파치 서버의 ‘본가 주소’입니다.
- 모든 상대 경로는 이
ServerRoot를 기준으로 계산됩니다. (예:conf/httpd.conf는 실제로는/etc/httpd/conf/httpd.conf를 의미합니다.)
Listen 80
- 의미: 방문자의 요청(트래픽)을 ‘수신’할 포트 번호입니다.
Listen 80은 HTTP,Listen 443은 HTTPS를 의미합니다.- Nginx의
listen 80;과 동일한, 웹 서버의 가장 기본적인 ‘대문’ 설정입니다.
User www-data / Group www-data
- 의미: 아파치 자식 프로세스(Worker)가 실행될 ‘보안 권한’입니다.
- 비유: 서버의 ‘보안 유니폼’입니다.
- 방문자 요청을 처리할 때, 막강한
root권한이 아닌, 권한이 최소화된www-data(또는apache) 사용자로 실행되어 해킹 피해를 최소화합니다.
ServerName www.example.com:80
- 의미: 서버의 공식 ‘도메인 이름’입니다.
- 이 값을 설정하지 않으면 아파치가 시작할 때마다 ‘서버 이름을 확인할 수 없다’는 경고가 발생합니다.
<VirtualHost>(가상 호스트) 설정이 일반화된 지금은, 주로 가상 호스트 블록 안에서 더 중요하게 사용됩니다.
2. 📂 ‘콘텐츠’의 위치와 규칙 (Main Server)
방문자에게 어떤 파일을, 어떤 규칙으로 보여줄지 정의합니다.
DocumentRoot "/var/www/html"
- 의미: 웹사이트 파일(index.html 등)이 위치한 ‘최상위 폴더’입니다.
- 비유: 웹사이트의 ‘현관문’입니다.
- 방문자가
http://example.com/으로 접속하면, 아파치는/var/www/html/index.html파일을 찾아 보여줍니다. Nginx의root지시어와 정확히 같습니다.
<Directory "/var/www/html"> ... </Directory>
- 의미:
DocumentRoot로 지정된 폴더에 적용할 ‘보안 및 기능 규칙’입니다. - Nginx와 아파치를 구분 짓는 가장 중요하고 강력한 설정입니다.
아래는 이 <Directory> 블록 안에 들어가는 핵심 지시어 3가지입니다.
Options Indexes FollowSymLinks
- 의미: 해당 디렉터리에서 허용할 ‘기능’ 목록입니다.
Indexes: 만약index.html파일이 없을 때, 파일 목록을 그대로 보여줄지 여부. (보안상 끄는 것을 권장.Options -Indexes로 설정)FollowSymLinks: 심볼릭 링크(바로 가기)를 허용할지 여부.
AllowOverride None (⭐ 가장 중요 ⭐)
- 의미:
.htaccess파일의 작동 허용 여부입니다. - 아파치의 심장이자, Nginx와 철학이 다른 지점입니다.
AllowOverride None:.htaccess파일을 무시합니다. (Nginx와 동일하게 작동, 최고 성능)AllowOverride All:.htaccess파일의 설정을 허용합니다.- 단점: 방문자가 요청할 때마다 아파치가 해당 폴더와 상위 폴더를 전부 뒤져
.htaccess파일을 읽어야 하므로 성능이 저하됩니다. - 장점: 서버 관리자(root)가
httpd.conf를 재시작하지 않아도, 웹 개발자가 FTP로.htaccess파일만 수정해 리다이렉트나 캐시 규칙을 적용할 수 있습니다. (공유 호스팅에서 필수)
- 단점: 방문자가 요청할 때마다 아파치가 해당 폴더와 상위 폴더를 전부 뒤져
Require all granted
- 의미: 해당 디렉터리에 대한 ‘접근 제어’입니다.
Require all granted: (Apache 2.4+) 모든 접근을 허용합니다. (기본값)Require all denied: 모든 접근을 차단합니다.Require ip 192.168.0.1: 특정 IP만 허용합니다.
3. 📑 ‘로그’와 ‘모듈’ 관리 (Includes & Logs)
ErrorLog "logs/error_log" / CustomLog "logs/access_log" common
- 의미: ‘에러 로그’와 ‘접속 로그’를 기록할 파일 경로입니다.
ErrorLog: 404 오류, 500 서버 다운, PHP 오류 등 서버의 모든 문제가 기록되는 ‘사고 기록부’입니다. (서버 문제 해결의 첫걸음)CustomLog: 누가(IP) 언제(시간) 무엇을(URL) 요청했는지 기록되는 ‘방문자 기록부’입니다.common은LogFormat으로 미리 정의된 로그 형식입니다.
IncludeOptional conf.d/*.conf / IncludeOptional sites-enabled/*.conf
- 의미: 현대 아파치의 핵심입니다.
httpd.conf파일을 깨끗하게 유지하기 위해, 다른 설정 파일들을 ‘불러오는(Include)’ 지시어입니다. - 비유:
httpd.conf는 ‘목차’이고, 실제 내용은conf.d/나sites-enabled/폴더 안의*.conf파일에 작성합니다. - 워드프레스 사이트(my-site.com)를 추가할 때:
httpd.conf를 건드리는 것이 아니라,sites-available/my-site.conf파일을 만들어<VirtualHost>설정을 넣고,a2ensite명령어로sites-enabled/에 링크를 거는 방식입니다.
4. 🏢 ‘가상 호스트’ (VirtualHost)
IncludeOptional sites-enabled/*.conf가 불러오는 파일의 실제 내용입니다. 하나의 서버(IP)에서 여러 도메인을 운영하게 해줍니다.
Apache
# /etc/apache2/sites-available/wordpress.conf (예시)
<VirtualHost *:80>
# 1. 이 가상 호스트가 응답할 도메인
ServerName www.my-wordpress.com
ServerAlias my-wordpress.com
# 2. 이 도메인의 웹사이트 파일 위치
DocumentRoot /var/www/wordpress
# 3. 이 도메인 전용 로그
ErrorLog ${APACHE_LOG_DIR}/wordpress-error.log
CustomLog ${APACHE_LOG_DIR}/wordpress-access.log common
# 4. 이 도메인 전용 규칙
<Directory /var/www/wordpress>
AllowOverride All # 워드프레스는 .htaccess가 필수이므로 'All'로 설정
Require all granted
</Directory>
</VirtualHost>
요약: Nginx vs Apache 설정 철학
- Nginx: “모든 설정은
nginx.conf(또는sites-enabled/)에서 중앙 관리한다..htaccess같은 건 성능을 위해 없다.” - Apache: “핵심 설정은
httpd.conf(또는apache2.conf)에 있지만,AllowOverride All을 통해 각 개발자가.htaccess파일로 세부 규칙을 분산 제어할 수 있다.”