Apache HTTP Server Version 2.2
This document refers to a legacy release (2.2) of Apache httpd. The active release (2.4) is documented here. If you have not already upgraded, please follow this link for more information.
You may follow this link to go to the current version of this document.
가상호스트를 많이 사용하고 각 가상호스트에 서로 다른 로그파일을 지정하면, 아파치가 사용가능한 파일기술자(file descriptor, 흔히 파일핸들(file handle)이라고 부름)를 다 써버릴 수 있다. 아파치가 사용하는 파일기술자의 총 개수는 오류 로그파일당 한개, 다른 로그파일 지시어당 한개, 추가로 내부용도로 10-20개를 더한 수다. 유닉스 운영체제는 프로세스가 사용할 수 있는 파일기술자 개수를 제한한다. 이 한계는 보통 64개로, 보통 이보다 큰 hard-limit까지 늘릴 수 있다.
아파치는 이 한계를 필요한만큼 늘리려고 하지만, 실패하는 경우가 있다:
setrlimit()
시스템호출을
제공하지 않는다.setrlimit(RLIMIT_NOFILE)
함수가 동작하지
않는다.이 경우 해결책은:
<VirtualHost>
섹션에서 로그파일을
지정하지 않고 주 로그파일을 사용한다. (더 자세한 방법은
아래 로그파일 나누기를 참고하라.)
#!/bin/sh
ulimit -S -n 100
exec httpd
여러 가상호스트가 같은 로그파일을 사용한다면 나중에 각 가상호스트의 통계분석을 위해 로그파일을 나누고 싶을 것이다. 이 작업은 다음과 같이 할 수 있다.
먼저 로그 항목에 가상호스트 정보를 추가한다. 이를 위해
LogFormat
지시어와 %v
변수를 사용한다. 이 변수를 로그
형식문자열 앞에 추가한다:
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost
CustomLog logs/multiple_vhost_log vhost
그러면 common 로그형식 앞에 (ServerName
지시어에 나오는) 정규
가상호스트를 포함하여 로그파일을 기록한다. (로그파일
사용자정의에 관한 내용은 사용자정의 로그형식
을
참고하라.)
로그파일을 (가상호스트당 한 파일씩) 나누고 싶다면 split-logfile
프로그램을
사용한다. 이 프로그램은 아파치 배포본의 support
디렉토리에 있다.
다음과 같이 프로그램을 실행한다:
split-logfile < /logs/multiple_vhost_log
가상호스트 로그파일을 가지고 이 프로그램을 실행하면 로그파일에
나오는 각 가상호스트당 파일을 하나씩 만든다. 각각의 파일명은
hostname.log
이다.