Apache HTTP Server Version 2.4
가상호스트를 많이 사용하고 각 가상호스트에 서로 다른 로그파일을 지정하면, 아파치가 사용가능한 파일기술자(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
이다.