예전에 nginx 로그 설정 때 궁금해서 찾아본 내용인데 내용 자체는 내가 정리한 것이 아니라 다른 개발자 블로그 분이 정리한 내용이다.
그때 당시에는 블로그에 올릴 생각이 없어서 개인 메모로 따로 남겨놓은 내용인데 메모 내용을 블로그로 옮기다 보니 출처를 까먹어서 내용 을 좀 정리해서 다시 올린다.
전역 로그 설정
nginx 의 가상 호스트 설정에는 다음과 같이 웹 서버의 로그 파일을 기록하도록 설정했습니다.
server {
root /var/www/www.lesstif.com;
listen 443 ssl http2;
server_name www.lesstif.com;
charset utf-8;
access_log /var/log/nginx/lesstif.com-ssl.access.log combined;
error_log /var/log/nginx/lesstif.com-ssl.error.log notice;
}
logrotate 설정
# vi /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
- missingok : 로그 파일이 없어도 에러를 내지 않음
- rotate 52: 로그 파일을 52개까지만 보관(53일 이전것은 삭제), 필요한 경우 숫자를 조정해서 로그 보관 일수를 변경
- compress: 압축해서 보관
- create 640 nginx nginx: 새로 로그 파일 생성시 640 모드로 생성하고 소유자, 그룹은 nginx
- 실제 nginx 웹 서버의 구동 계정과 맞춰야 하며 잘못 설정했을 경우 nginx 가 로그를 기록할 수 없습니다.
- notifempty: 빈 로그파일은 로테이트 하지 않습니다.
- postrotate: rotate 작업을 마친후에 실행할 스크립트를 적어줍니다. nginx 의 경우 SIGUSR1 을 받으면 로그 파일을 새로 읽으므로 새로 만들어진 로그 파일에 로그를 기록합니다.
- 이 부분이 제대로 설정되어 있지 않으면 nginx 는 이미 오픈한 로그 파일에 계속 기록합니다. 이로 인해 예전 로그 파일에 내용이 쌓이므로 주의해야 합니다.
정상 설정 여부를 테스트하기 위해 다음 명령어를 실행합니다.
# logrotate -d -f /etc/logrotate.d/nginx
- -d, --debug : 디버그 모드, 실제 로그 파일을 변경하지는 않고 처리 과정만 표시합니다.
정상적으로 설정됐다면 /etc/cron.daily/logrotate 파일이 있으므로 별도로 크론에 등록하지 않아도 매일 log 파일 rotate 를 실행됩니다.
'개발팁 > nginx' 카테고리의 다른 글
nginx 에러페이지 설정 (0) | 2021.03.23 |
---|