Infra System

Apache 설정 톺아보기 ( Httpd.conf / Apache2.conf )

kellis 2025. 5. 30. 16:47

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 단계 (낮은 → 높은 우선순위)

  1. emerg – 시스템이 사용 불가능할 정도로 매우 위험한 상황의 메시지
  2. alert – 즉시 조치가 필요한 문제
  3. crit – 치명적인 오류
  4. error – 일반적인 오류
  5. warn – 경고
  6. notice – 주목할 만한 이벤트 에러가 아닌 알림에 대한 메시지
  7. info – 정보성 메시지 (일반 로그) 단순 프로그램 정보나 통계관련 메시지
  8. debug – 매우 상세한 디버깅 정보
  9. trace1~8 – 트레이스 레벨