
Nginx에서 로그 회전을 수행하는 예를 찾았습니다.여기
그러나 다음을 사용한 간단한 테스트:
set $date "2018-08-24";
access_log /home/tim/log/access-http-$date.log default;
라는 로그 파일을 생성합니다 access-http-.log
. 저는 nginx 1.13.6(openresty 포함)을 사용하고 있습니다.
업데이트
많은 해킹과 조정 후에 nginx가 생성하는 다양한 로그 파일을 회전하기 위해 다음 logrotate 스크립트를 생각해 냈습니다. 저는 /etc/logrotate에 넣었습니다. 남은 문제는 로그가 매일 회전하지 않는다는 것입니다(현재로서는 이유를 잘 모르겠습니다). 그러나 a는 logrotate -f <filename>
내가 원하는 결과를 정확히 생성합니다.
흥미로운 점은 nginx -s reload
USR1 대신 사용할 수 있다는 것입니다. 불행히도 nginx 로깅 페이지에서는 참조되지 않았지만 (IIRC 매뉴얼 페이지에서) 찾았습니다. 필요한 추가 모듈을 통합하기 위해 openresty/nginx를 수동으로 빌드하므로 pid 유지와 같은 패키지 버전에 제공되는 다양한 추가 기능을 얻지 못합니다.
/path/to/log/access-http.log /path/to/log/access-https.log /path/to/log/api.log /path/to/log/error.log {
daily
missingok
notifempty
create 664 nobody tim
dateext
dateformat -%Y-%m-%d
dateyesterday
rotate 10
su tim tim
postrotate
/usr/local/bin/openresty -s reload
endscript
}
나는 이것이 웹페이지와 API를 모두 제공하는 대규모 nginx 구성을 가진 누구에게나 유용할 것이라고 생각합니다. 나는 https가 아닌 페이지를 제공하지 않기 때문에 http를 별도로 유지하고 내 페이지 로그에서 스크립트 키디 쓰레기를 유지합니다.
답변1
자정까지 1분 동안 cron 작업을 설정하여 로그 파일을 이동하고 날짜로 이름을 바꾼 다음 Nginx에 USR1 신호를 보냅니다. 이렇게 하면 로그 파일을 다시 열고 다음 날에 대한 새 로그 파일을 생성하게 됩니다.
59 23 * * * mv /var/log/nginx/access.log /var/log/nginx/$(date +%F).access.log && kill -USR1 $(cat /run/nginx.pid)