본문 바로가기

기술자료/기술운영자료

httpd.conf 설명 ( apache 2.x 기준)

그림입니다.
원본 그림의 이름: mem0000227400cc.tmp
원본 그림의 크기: 가로 150pixel, 세로 149pixel






오늘은 대표적인 웹 서버중 하나인 아파치의 설정 옵션에 대해 알아보기로 하겠습니다.


많은 서버에서 이용되고 있는 아파치이지만 막상 conf 파일을 원활하게 조정하고


상황에 맞는 설정을 정확하게 해내기란 만만치 않은 것 또한 사실입니다.


이 글이 많은 웹서버 관리자분들께 자그마한 도움이 되었으면 좋겠습니다.





주된 아파치 설정은 apache/conf/httpd.conf에 저장됩니다.


httpd.conf의 내용을 알아보도록 하겠습니다.



■ 기본 설정



그림입니다.
원본 그림의 이름: mem0000227400cd.tmp
원본 그림의 크기: 가로 246pixel, 세로 22pixel


ServerRoot는 웹서버 설정, 로그, 바이너리 파일, 모듈들이 위치하는

디렉토리를 지정하는 지시자 입니다.

주의하실 점은 디렉토리 마지막에 슬래시(/)를 붙여선 안된다는 것입니다.

 

 



그림입니다.
원본 그림의 이름: mem0000227400ce.tmp
원본 그림의 크기: 가로 79pixel, 세로 18pixel

아파치 웹서버의 서비스 포트를 지정하는 부분입니다.

 

 


그림입니다.
원본 그림의 이름: mem0000227400cf.tmp
원본 그림의 크기: 가로 459pixel, 세로 335pixel


PHP나 아파치에서 지원하는 표준 모듈을 DSO(Dynamic Shared Object) 방식으로 적재하여 사용할 때 설정합니다.

 

 



그림입니다.
원본 그림의 이름: mem0000227400d0.tmp
원본 그림의 크기: 가로 103pixel, 세로 37pixel


웹 서버를 실행할 때 소유권을 갖게 되는 사용자와 그룹명을 지정해줍니다.

이 지시자에 설정되는 사용자와 그룹명은 실제 서버에 존재하는 사용자와 그룹명이어야 합니다.

 

 




그림입니다.
원본 그림의 이름: mem0000227400d1.tmp
원본 그림의 크기: 가로 312pixel, 세로 20pixel


웹문서 루트 디렉토리를 지정합니다. 인덱스 페이지가 저장되는 장소입니다.

 

 



그림입니다.
원본 그림의 이름: mem0000227400d2.tmp
원본 그림의 크기: 가로 266pixel, 세로 92pixel

 

아파치 서버가 접근하는 각 디렉토리에 어떤 서비스와 기능들을 허용 또는 삭제할 것인가를 설정합니다.

각 지시자들의 의미는 아래와 같습니다.



<Options 지시자>

옵션

 

 

설명

 

 

None

 

 

아무 옵션을 사용하지 않음

 

 

All

 

 

모든 옵션을 사용함

 

 

Indexes

 

 

웹사이트를 접속하였을 때 index.html이 없는 경우

웹서버 스스로 그 디렉토리의 파일들을 보여줄 것인가를

결정함. 보안상 사용하지 않는 것이 좋음

 

 

 

 

 

 

FollowSymLinks

 

 

서버가 디렉토리 안의 심볼릭 링크를 따를 것인지 결정

 

 

Includes

 

 

서버측의 SSI를 허용할 것인지 결정

 

 

ExecCGI

 

 

디렉토리 이하에 있는 CGI 스크립트 실행 허가

 

 

IncludesNOEXEC

 

 

SSI 허용하지만, #exec명령과

스크립트 #incllude 불허

 

 

 

 

SymLinksIfOwnerMatch

 

 

대상 파일 또는 디렉토리가 심볼릭 링크 소유권자와

같은 소유권을 보유할 때 심볼릭 링크를 따르도록 지정

 

 

 

 

MultiViews

 

 

클라이언트 브라우저 기능에 따라 내용을 다르게 보냄

 

 



<AllowOverride 지시자>

설명

 

 

웹문서 디렉토리에서 접근제한 설정파일인 .htaccess

파일을 작동시킬 것인지 여부를 결정

None으로 설정시 .htaccess파일을 읽지 않음

웹서버에 사용자의 접근을 제한하고자 한다면

AllowOverride All로 정책을 준 후에 .htaccess파일을 생성

 

 

 

 

 

 

 

 

 

 



<Order 지시자>

옵션

 

 

설명

 

 

Order allow, deny

 

 

먼저 허용해 주고 나서 거부하는 순으로 작동

 

 

Order deny, allow

 

 

먼저 거부하고 나서 허용하는 순으로 작동

서버에 특정 호스트만 접근할 수 있도록

하고자 할 때 사용

 

 

 

 

 

 




<Allow from all / Deny from all >

옵션

 

 

설명

 

 

Allow from all

 

 

모든 호스트로부터의 요청을 허가

 

 

Deny from all

 

 

모든 호스트로부터의 요청을 거부

 

 





그림입니다.
원본 그림의 이름: mem0000227400d3.tmp
원본 그림의 크기: 가로 282pixel, 세로 17pixel


지정된 순서대로 html문서를 실행하여 클라이언트에 전달합니다.

지정되는 웹문서들은 반드시 웹서버 디렉토리에 존재해야 합니다.





■ 추가 설정


apache 2.2.x 버전에서는 모듈별로 별도의 파일로 구분되어 Include 지시자를 통하여

읽어올 수 있도록 세분화 되어 있습니다.


apache/conf/extra/ 디렉토리에 존재하는 설정파일 및 설명은 아래와 같습니다.



파일명

 

 

설명

 

 

httpd-autoindex.conf

 

 

자동 인덱스 기능과 알리어스, 아이콘 관련 설정

 

 

httpd-dav.conf

 

 

WebDev 관련 설정

 

 

httpd-info.conf

 

 

아파치 웹 서버 상황 및 환경설정 관련

 

 

httpd-default.conf

 

 

기본 지시자 설정

 

 

httpd-mpm.conf

 

 

프로세스 설정

 

 

httpd-multi-ordoc.conf

 

 

서버 오류에 관련 설정

 

 

httpd-ssl.conf

 

 

SSL 관련 설정

 

 

httpd-userdir.conf

 

 

사용자 디렉토리 관련 설정

 

 

httpd-vhosts.conf

 

 

가상호스트에 관련된 설정

 

 




1. 아파치 기본 설정 ( httpd-default.conf )

 

 

그림입니다.
원본 그림의 이름: mem0000227400d4.tmp
원본 그림의 크기: 가로 198pixel, 세로 18pixel

 

클라이언트가 접속한 후 GET 요청을 받을 때 까지 기다리는 시간(/sec)

이 시간을 초과하게 되면 클라이언트 접속을 끊어버립니다.




그림입니다.
원본 그림의 이름: mem0000227400d5.tmp
원본 그림의 크기: 가로 192pixel, 세로 17pixel


한번 연결에 대하여 한번 이상의 요청을 허용할 것인가 아닌가의 여부를 결정합니다.

연결되어 있는 상태에서 여러 개의 요청을 한번에 받아 처리하게 되면 속도 면에서 잇점이 있습니다.

하지만 최대 접속 한계에 도달하였을 때 새로운 접속은 다른 접속이 끊어질 때 까지 대기해야하는 단점도 존재합니다.




그림입니다.
원본 그림의 이름: mem0000227400d6.tmp
원본 그림의 크기: 가로 196pixel, 세로 18pixel


접속동안 허용할 최대 요청 회수를 지정합니다.




그림입니다.
원본 그림의 이름: mem0000227400d7.tmp
원본 그림의 크기: 가로 192pixel, 세로 18pixel


같은 클라이언트가 같은 접속방법으로 다음 요청을 했을때 기다리는 시간을 설정합니다.

보안상 설정값은 짧게 설정하는 것이 좋습니다.




그림입니다.
원본 그림의 이름: mem0000227400d8.tmp
원본 그림의 크기: 가로 192pixel, 세로 18pixel


아파치 응답 헤더를 어디까지 보여줄 것인지를 설정하는 지시자입니다.

이 지시자의 인수로는 아래와 같습니다.


인수

 

 

설명

 

 

Prod

 

 

아파치 정보만 보여줌 ex) Apache

 

 

Major

 

 

아파치 주버전 정보까지 보여줌 ex) Apache/2

 

 

Minor

 

 

아파치 하위버전 정보까지 보여줌 ex) Apache/2.0

 

 

Min

 

 

아파치 모든버전 정보를 보여줌 ex) Apache/2.0.43

 

 

OS

 

 

아파치 버전과 운영체제 정보를 보여줌

ex)Apache/2.0.43 (Unix)

 

 

 

 

Full

 

 

아파치 버전, 운영체제, 모듈정보 모두를 보여줌

ex)Apache/2.0.43 (Unix) PHP 4.2.3

 

 

 

 





2. 서버 풀 관리 ( httpd-mpm.conf )


그림입니다.
원본 그림의 이름: mem0000227400d9.tmp
원본 그림의 크기: 가로 604pixel, 세로 441pixel



* 아파치의 풀 관리 방식으로는 두가지 형태가 주로 사용됩니다.

  하나는 prefork MPM 방식으로 프로세스를 미리 분기하여 쓰레드가 한개의 자식 프로세스를 여러개 사용하는 방식입니다.

  prefork 방식은 쓰레드에 안전하지 않는 PHP등을 사용하기에 적합합니다.

  worker MPM 방식은 여러 자식 프로세스가 각각 여러개의 쓰레드를 사용하며, prefork 방식에 비해 적은 메모리를 사용하여

  확장성을 요구하는 곳에 적합합니다.

  각 방식별 옵션은 아래와 같습니다.


Prefork MPM 지시자

 

 

StartServers

 

 

몇 개의 자식 프로세스를 미리 띄워놓을 것인가를 결정

 

 

 

MinSpareServers,

MaxSpareServers

 

 

 

 

아파치서버는 얼마나 많은 프로세스들이 요청을 기다리고 있는 지 주기적으로 점검을 하게 되는데, 이때 Min값보다 작으면 프로세스를 이 값으로 설정한 만큼 다시 만들어내고, Max값보다 많아지게 되면 이 값으로 설정한 만큼 일부 프로세스를 종료

 

 

 

 

MaxClients

 

 

클라이언트들이 동시에 최대로 접속했을 때 실행 가능한 최대 프로세스의 수를 지정

너무 작게 설정하면 클라이언트들이 무한정 기다리는 상태가 될 수도 있음

최대 클라이언트 수를 증가시키기 위해서는 ServerLimit 값도 증가시켜주어야 함

 

 

 

 

 

 

 

MaxRequestsPerChild

 

 

자식프로세스가 죽기 전에 처리할 수 있는 요청개수를 지정,예기치 않은 메모리 누수로 인하여 프로세스가 소모하는 메모리 양을 제한할 수도 있고, 서버로그가 감소할 때 프로세스 수를 감소시키는 효과

 

 

 



Worker MPM 지시자

 

 

StartServers

 

 

처음에 실행될 프로세스 개수

 

 

MinSpareThreads,

MaxSpareThreads

 

 

 

 

지시자에 설정된 값 만큼 쓰레드를 생성하거나 죽임

 

 

ThreadsPerChild

 

 

각 자식 프로세스는 이 지시자에 의해서 설정된 값 만큼의 고정된 쓰레드를 생성

 

 

MaxClients

 

 

최대 동시에 클라이언트가 접속 가능한 쓰레드 수 설정

ServerLimit와 ThreadsPerChild를 곱한 값이

MaxClients 값과 같거나 커야 함

 

 

 

 

 

 

ServerLimit

 

 

캐시될 프로세스의 최대 개수

 

 

 




3. 가상호스트 설정 ( httpd-vhosts.conf )


가상호스트란 한대의 웹 서버에서 여러개의 호스트를 이용, 여러 개의 홈페이지를 운영하는 방법입니다.

이 기능을 이용하면 독립적인 서버를 추가하지 않고서도 한 대의 웹 서버에서 또 다른 데몬의 동작 없이도

여러개의 도메인에 대한 웹 서비스를 제공할 수 있습니다.



그림입니다.
원본 그림의 이름: mem0000227400da.tmp
원본 그림의 크기: 가로 404pixel, 세로 348pixel



단일 IP 주소로 여러개의 가상 호스트를 설정할 때 주의할 점은 가상 호스트를 위한 설정이라도

NameVirtualHost 지시자 다음에 반드시 메인서버에 대한 버추얼 호스트 지정을 먼저 선언해 주어야한다는 것 입니다.

메인 서버에 대한 버추얼 호스트 설정을 생략하게 되면 메인 서버의 도메인으로 접속할 때,

메인 서버로 접속이 이루어지지 않고 버추얼 호스트로 접속하게 되는 문제가 발생하게 됩니다.



VirtualHost 지시자

 

 

ServerAdmin

 

 

서버 관리자 이메일 주소 설정

 

 

DocumentRoot

 

 

웹 문서 디렉토리 설정

 

 

ServerName

 

 

가상 호스트 도메인 이름 설정

 

 

ErrorLog, CustomLog

 

 

로그 오류 및 액세스 로그 파일 지정

 

 






이외에도 아파치에는 많은 설정 가능한 옵션들이 있습니다.

조금씩 알아가며 배워간다면 능숙한 서버관리자가 되는 길에 한결 가까워질 수 있지 않을까 생각합니다.








그림입니다.
원본 그림의 이름: mem0000227400db.tmp
원본 그림의 크기: 가로 134pixel, 세로 44pixel