커피닉스, 시스템 엔지니어의 쉼터
  apache에서 404, 403 액세스 로그만 별도로 저장하기 작성일 : 2016/04/19 18:09
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 1934
     
    제  목 : apache에서 404, 403 액세스 로그만 별도로 저장하기
    작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
    작성일 : 2016.4.12(화)

    지인이 아파치(apache)에서 전체 요청 로그와 별도로 404 not found나 403 forbidden 액세스 로그만 남기는 방법이 있는지 물어본다. ELK처럼 웹로그를 DB로 쌓는다면 404, 403 액세스 로그만 별도로 추출하는 게 문제가 되지 않을 것이다. 모두 쌓고, 필요한 것만 바로 뽑아보면 되니깐. 하지만 로그를 파일로 쌓는 경우 404와 403을 별도로 저장하는 방법이 있을까? 난 모르는데. 떠오르는 방법은 2개.

    1) apache에서 HTTP status code값을 갖고 있는 변수가 있다면 SetEnvIf를 이용해서 가능할 것. 그러나 내가 알기로는 이런 변수는 없다.
    2) CustomLog 설정에서 파이프(|)를 써서 외부 프로그램을 요청한다. 외부 프로그램에서 status code에 따라 로그를 분리해서 저장한다.


    1. mod_setenvifplus 모듈



    apache에 HTTP status code값을 갖고 있는 변수는 없다. 그런데 mod_setenvifplus 모듈에 해당 변수가 있다. Response_Status 변수명에 값이 저장된다.

    1) Linux

    mod_setenvifplus 페이지( http://opensource.adnovum.ch/mod_setenvifplus/ )에서 받아 모듈을 설치한다.

     
    # apxs -i -a -c mod_setenvifplus.c
     


    2) FreeBSD

     
    # pkg install ap24-mod_setenvifplus
     



    2. apache 설정

     
    <Directory ...>
    ResponseSetEnvIfPlus Response_Status  404 statuscode=404
    ResponseSetEnvIfPlus Response_Status  403 statuscode=403
    </Directory>

    CustomLog  "|/usr/local/sbin/cronolog --symlink=/LOG/httpd-access.log /LOG/httpd-access.log.%Y%m" combined
    CustomLog  "|/usr/local/sbin/cronolog --symlink=/LOG/httpd-access_40x.log /LOG/httpd-access_40x.log.%Y%m" combined env=statuscode
     


    - /LOG/httpd-access.log.%Y%m 파일에는 모든 요청 로그가 남는다.
    - /LOG/httpd-access_40x.log.%Y%m 파일에는 403, 404 status code 로그만 남는다.

    주의할 것 2가지.

    1) ResponseSetEnvIfPlus는 <Directory> 또는 <Location>내에서만 사용할 수 있다.
    2) ssl 모듈이 필요하다. ssl 설정은 필요없고, 모듈만 로딩하면 된다. ssl 모듈이 로딩되지 않으면 apache 실행시 Undefined symbol "EVP_CIPHER_CTX_init" 에러가 나온다.
     
    LoadModule ssl_module ...경로...
     


    커피닉스, 시스템 엔지니어의 쉼터 / URL : http://coffeenix.net/board_view.php?bd_code=1786