Apache 서버를 운영하다 보면 조만간 log 파일들(access_log과 error_log)이 너무 비대해 지거나, 필요도 없는 오래된 정보로 인해 재설정을 해줘야 할 때가 옵니다.
일반적으로, access.log는 매 10,000 요청마다 1Mb 정도로 커지는 데, 대부분의 사용자들은 log 파일을 새 것으로 대체할 목적으로 log 파일을 옮기거나 지우기만 하면 그만이라고 생각하지만, 이것은 올바른 조치가 아닙니다.
왜냐하면, 이렇게 해도 Apache는 log 파일이 옮겨지기 전의 같은 offset에 계속 이어서 기록을 하게 되기 때문입니다. 이것은 이전 것과 같은 크기의 새로운 log 파일이 다시 생성되는 결과를 가져오며, 파일 안에는 수 천(혹은 수 만)의 빈 글자들로 채워지게 됩니다.
그래서, 올바르게 log 파일을 재설정하는 방법은 아래처럼, 우선 log 파일을 옮긴 후에, Apache에게 새로운 log 파일을 다시 열도록 지시합니다.
mv access_log access_log.oldmv error_log error_log.oldapachectl gracefulsleep 600gzip access_log.old error_log.old
주의: 위에서는 restart 대신에 graceful 명령을 썼기 때문에, Apache가 clients와 접속을 끝낼 때 까지는 계속 이전 log 파일에 기록을 할 수 있도록 sleep 명령을 써서 약간의 시간만큼 기다리도록 해줘야 합니다.
log 파일들의 재설정 (그리고 저장)은 대게 매일 밤 혹은 주간으로 행해지는 것이 좋습니다만, Mac OS X에서는 crontab 작업들 중에 포함되어서(/etc/periodic/weekly/500.weekly) 자동적으로 수행됩니다.
다음은, Mac OS X의 주간 cron 작업에 포함된 Apache log 파일 순환(rotate) shell script:
cd /var/log/httpdecho ""
위에서 log 파일들이 저장되어 있는 디렉토리와 http daemon의 pid가 저장되어 있는 파일이 생성될 위치, 그리고 apachectl 명령의 설치 위치만 수정해 주면, 따로 설치한 Apache에도 적용될 수 있을 겁니다.
기타 log 관련 사용 예
localhost에서의 접속 내용을 log 파일에 기록하지 않음:
# Mark requests from the loop-back interfaceSetEnvIf Remote_Addr "192.168.0" dontlogSetEnvIf Remote_Addr "127.0.0.1" dontlog
특정 요청 내용을 log 파일에 기록하지 않음:
# Mark requests for the robots.txt and the favicon.ico fileSetEnvIf Request_URI "^/favicon.ico$" dontlogSetEnvIf Request_URI "^/robots.txt$" dontlog# Log what remainsCustomLog logs/access_log combined env=!dontlog
그림 파일 요청 내용을 access log 파일에 기록하지 않음:
SetEnvIf Request_URI .gif image-requestSetEnvIf Request_URI .jpg image-requestSetEnvIf Request_URI .png image-requestCustomLog logs/access_log common env=!image-request
그림 파일의 “훔침” 방지:
다른 사람이 서버에 있는 그림을 자기들 페이지로 주소만 불러와서 사용하지 못하게 함.
(모든 그림 파일들이 /web/images/ 디렉토리에 있다고 가정)
SetEnvIf Referer "^http://www.example.com/" local_referal# Allow browsers that do not send Referer infoSetEnvIf Referer "^$" local_referalOrder Deny,AllowDeny from allAllow from env=local_referal
“Apache의 log 파일과 환경 변수 설정”에 달린 한 개의 댓글
pinetree의 생각…
초 거대용량 로그파일 처리방법…