nginx 원생 방법 으로 로그 분할 을 진행 하 는 몇 가지 문제 및 해결 방안

3247 단어
nginx 로그 분할 원생 방법
nginx 의 방문 로그 access. log 는 방문 량 이 증가 함 에 따라 점점 커지 고 저장 과 분석 에 불리 하기 때문에 일반적으로 분할 합 니 다.가장 흔히 볼 수 있 는 것 은 하루 에 한 개의 로그 파일 을 분할 하 는 것 이다.
보통 로그 분할 방법 은 셸 스 크 립 트 + crontab 정시 작업 으로 매일 새벽 정시 에 로그 파일 의 이름 을 바 꾸 는 것 입 니 다. 이 방법 은 효과 적 이지 만 좀 번 거 롭 습 니 다.사실 nginx 자체 가 로그 파일 의 이름 을 바 꾸 는 것 을 지원 합 니 다. nginx 의 설정 파일 nginx. conf 를 직접 수정 하면 같은 효 과 를 얻 을 수 있 기 때문에 nginx 원생 방법 이 라 고 합 니 다.구체 적 방법 참조https://blog.csdn.net/molaifeng/article/details/82667158수 정 된 스 크 립 트 는 다음 과 같 습 니 다.
/etc/nginx/nginx.conf
if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
   set $time $1$2$3;
}

#access_log  /var/myweb/logs/access.log;
access_log  /var/myweb/logs/access_${time}.log;

수정 하고 실행 하 다
nginx -s reload

프로필 을 유효 하 게 합 니 다.
상기 방법 으로 조작 하 는 과정 에서 두 가지 문 제 를 발 견 했 는데 현상 과 해결 방안 은 다음 과 같다.
문제 1: if 문장의 위치 가 틀 렸 습 니 다. 
현상.
ngix. conf 에서 로그 파일 의 기본 설정 은 http 단락 에 두 고 상기 코드 를 이 위치 에 두 면:
http {

......

        ##
        # Logging Settings
        ##
        if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
           set $time $1$2$3;
        }

        #access_log /var/log/nginx/access.log;
        access_log  /var/myweb/logs/access_${time}.log;
        error_log /var/log/nginx/error.log;

......
}

nginx - s reload 를 실행 할 때 오류 가 발생 합 니 다:
nginx: [emerg] "if" directive is not allowed here in /etc/nginx/nginx.conf:29
원인 분석
이 유 는 if 문 구 는 nginx 가 설정 한 server 나 location 단락 에 만 넣 을 수 있 기 때 문 입 니 다.다음 글 참조:
https://www.cnblogs.com/xuey/p/7631690.html
해결 방안
위 설정 을 server 단락 에 넣 으 면 다음 과 같 습 니 다.
http {

......

        server {
            ......

            if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
               set $time $1$2$3;
            }
            access_log  /var/myweb/logs/access_${time}.log;
            
            ......
        }
......
}

nginx - s reload 를 실행 할 때 OK 입 니 다.
질문 2: 로그 파일 쓰기 권한 부족
현상.
nginx 오류, 로그 파일 을 정확하게 쓸 수 없습니다. error. log 의 오류 정 보 는 다음 과 같 습 니 다.
019/05/27 17:43:30 [crit] 9739#9739: *2420 open() "/usr/myapp/log/access-20190527.log" failed (13: Permission denied) while logging request, client: 1.86.245.7, server: ocrwiz.com, request: "GET /favicon.ico HTTP/1.1", host: "ocrwiz.com"
원인 분석
nginx 의 기본 사용자 와 사용자 그룹 은 www - data 입 니 다. 이전에 만 든 로그 디 렉 터 리 / usr / myapp / log 는 루트 사용자 로 만 들 었 습 니 다. nginx 가 날짜 에 따라 새 로그 파일 을 쓸 때 www - data 사용자 그룹 권한 이 낮 아서 지정 한 로그 디 렉 터 리 에 파일 을 쓸 수 없습니다.
해결 방안
로그 디 렉 터 리 의 소유 자 를 www - data 로 바 꾸 어 로그 디 렉 터 리 에 파일 을 쓸 수 있 도록 합 니 다.지정 한 응용 시스템 의 로그 디 렉 터 리 가: / usr / myapp / log 라 고 가정 하면 명령 은 다음 과 같 습 니 다.
chown www-data:www-data /usr/myapp/log

고 친 후에 정상적으로 일 지 를 쓸 수 있 을 것 이다.
남 겨 진 문제
이상 방법 은 방문 로그 accesslog 는 유효 하지만 errorlog, 같은 설정:
error_log  /var/myweb/logs/error_${time}.log;

시스템 은 자동 으로 날짜 에 따라 error 와 유사 하 게 나 누 지 않 습 니 다.20190527. log 와 같은 파일 이 아니 라 error $를 직접 생 성 했 습 니 다.{time}. log 파일.
구체 적 인 원인 이 무엇 인지 아직 잘 모 르 겠 습 니 다. 고수 에 게 소스 코드 를 분석 해 달라 고 할 지도 모 릅 니 다.
 
 
 
 
 

좋은 웹페이지 즐겨찾기