Apache 설정 톺아보기 ( Httpd.conf / Apache2.conf )
1. Httpd.conf 와 Apache2.conf 가 뭐가 달라?
* 두 파일은 아파치의 메인 설정 파일로, 같은 역할을 수행합니다.
* 차이점은 이름과 구조가 배포판에 따라 다르다는 점입니다.
Red Hat 계열 (CentOS, RHEL, Fedora) |
/etc/httpd/conf/httpd.conf | 메인 설정 파일 하나로 대부분의 설정 포함. |
Debian 계열 (Ubuntu 등) | /etc/apache2/apache2.conf | 설정 분산 구조. 다른 설정 파일들을 include함. |
Arch Linux | /etc/httpd/conf/httpd.conf | Red Hat 계열과 유사한 구조 사용. |
SUSE (openSUSE 등) | /etc/apache2/httpd.conf 또는 /etc/apache2/default-server.conf |
약간 다르지만 구조는 Debian과 유사. 보통 apache2.conf 또는 httpd.conf가 존재함. |
즉, 메인 설정 파일의 이름은 대부분 httpd.conf 또는 apache2.conf
* ubuntu 환경 기준으로 작성되었습니다.
2. Apache 설정 구조
보통 아파치는 /etc/apache2/ 아래 위치하고 있습니다.
/etc/apache2/
├── apache2.conf # 메인 설정 파일
├── ports.conf # 포트 설정
├── sites-available/ # 가상 호스트 설정 (활성 전)
├── sites-enabled/ # 활성화된 가상 호스트 설정
├── mods-available/ # 사용할 수 있는 모듈들
├── mods-enabled/ # 활성화된 모듈들
├── conf-available/ # 기타 설정 파일들
├── conf-enabled/ # 활성화된 설정들
apache.conf 가 전체 Apache 설정의 중심이고, 직접 대부분의 설정을 담고 있기 보다는 각각의 설정들을 Include하고 있습니다.
실제 설정들은 sites-*, mods-*, conf-* 디렉터리에 분산되어 저장됩니다.
이는 가독성과 유지보수성을 위해 만들어진 구조입니다.
mods-enabled/ | Apache 모듈을 로드 및 설정 (rewrite, ssl, headers 등) |
conf-enabled/ | 공통 설정 (예: 보안, MIME 타입, 압축 설정 등) |
ports.conf | 어떤 포트로 Listen할지 정의 (Listen 80, Listen 443) |
sites-enabled/ | 가상 호스트 설정 파일 (VirtualHost) |
(1) ports.conf
포트에 대한 설정파일. 아파치에서 받고자하는 포트를 여기에 기재해주면 됩니다.
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
mod_gnutls.c 는 뭔가요?
> GPL이라는 프로젝트에서 호환되는 GnuTLS 기반 SSL로 혹시나 쓰는 사람이 있을까봐 배포판에서 넣어준 예비 코드
> 거의 쓰는경우가 없으므로 궁금증 해소 정도로만 짚어두기
(2) mods-enabled/
모듈에 대한 설정 파일. Apache는 기능을 "모듈"로 제공합니다.
이 디렉토리 내부에 있는 모듈들은 현재 사용중인 모듈들로 대표적으로
- rewrite : URL 재작성
- ssl : HTTPS
- headers : 응답 헤더 설정
등이 있습니다.
enabled된 파일만 mods-enabled에 심볼릭 링크로 연결됩니다.
(3) conf-enabled/
공통 설정에 대한 파일. 사이트 전체에 적용되어야 하는 설정에 대한 부분이 여기에 들어갑니다.
- security.conf : 서버 정보 노출 방지, 디렉터리 접근 제어
- charset.conf : 기본 문자 인코딩 설정 (UTF-8 등)
- serve-cgi-bin.conf : CGI 실행 경로 설정
그외에도 압축, CORS, 캐시 정책 등을 정의할 수 있습니다.
(4) sites-available/ + sites-enabled/
가상호스트 설정파일. Apache에서 가상호스트 Virtual Host 는 하나의 서버로 여러 사이트를 운영할 수 있도록 해주는 핵심 기능입니다.
/etc/apache2/
├── sites-available/ ← 설정 파일 보관소
└── sites-enabled/ ← 활성화된 설정들의 심볼릭 링크
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example_error.log
CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/example
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
ErrorLog ${APACHE_LOG_DIR}/ssl_error.log
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
</VirtualHost>
- VirtualHost *:80 -> 80번 포트(HTTP)에서 모든 IP에 대해 listen
- VirtualHost *:443 -> 443번 포트(HTTP)에서 모든 IP에 대해 listen
- ServerName, Alias -> 도메인 주소 매칭
- DocumentRoot. -> 웹 루트 경로
- <Directory>. -> 해당 디렉터리 권한
Options Indexes FollowSymLinks : 디렉터리 동작옵션
- Indexes : 해당 디렉터리에 index.html 같은 기본 파일이 없을 때, 파일 목록을 자동으로 보여줌 (디렉터리 리스팅)
보안상 위험할 수 있음 → 실무에선 보통 끄는 게 안전함
- FollowSymLinks : Apache가 심볼릭 링크된 파일/디렉터리도 따라가서 접근 허용함
AllowOverride All : .htaccess 파일을 허용할지 여부.
- All: 해당 디렉터리에서 .htaccess로 모든 종류의 설정을 오버라이드할 수 있음.
- FileInfo AuthConfig : 일부만 허용
- None: 꺼놓으면 .htaccess 파일을 써도 무시됨
Require all granted : Apache 2.4 이상에서 사용하는 접근 제어 방식
- all granted : 해당 디렉터리에 모든 요청을 허용함
- ip 192.168.0.0/24 : 특정 IP 대역만 허용
- all denied : 모두 차단
3. Apache.conf 파일 분석
메인 설정 파일이자 전체 설정의 진입점.
- 전역 동작 설정: 서버 전체 공통 설정 정의
- Include 지시어들로 구성 분산: 구조적으로 다른 설정 파일들을 불러와서 유지보수 편하게
- 보안 기본값 설정: 기본 디렉터리 차단, 모듈 및 포트 제한 등
- 기능 모듈 연결: 필요한 기능(mod)들을 관리하는 중심
1. 사용자 권한 세팅
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
Apache가 접근할 수 있는 파일 권한을 제어할 때 기준이 됨
2. Include 옵션
# 모듈 로드 설정
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
# 포트 설정 포함
Include ports.conf
# 공통 설정 포함
IncludeOptional conf-enabled/*.conf
# 가상 호스트 설정 포함
IncludeOptional sites-enabled/*.conf
분리된 설정 파일들을 불러오는 옵션
3. Files
<Files ".ht*">
Require all denied
</Files>
.ht로시작하는 확장자의 파일에 제한을 걸어두는 옵션입니다.
.htaccess 파일(접근권한정보)과 .htpasswd 파일은 all denied로 접근할 수 없게 설정합니다.
3. LogLevel
LogLevel info ssl:warn
에러로그파일을 어느 정도로 자세하게 작성하도록 할지 지정하는 옵션입니다.
전체 로그는 info
ssl 관련 로그는 warn 으로 작성하겠다라는 예시입니다.
Apache의 LogLevel 단계 (낮은 → 높은 우선순위)
- emerg – 시스템이 사용 불가능할 정도로 매우 위험한 상황의 메시지
- alert – 즉시 조치가 필요한 문제
- crit – 치명적인 오류
- error – 일반적인 오류
- warn – 경고
- notice – 주목할 만한 이벤트 에러가 아닌 알림에 대한 메시지
- info – 정보성 메시지 (일반 로그) 단순 프로그램 정보나 통계관련 메시지
- debug – 매우 상세한 디버깅 정보
- trace1~8 – 트레이스 레벨