nginx access log 에 POST 데이터 기록하기

웹서비스 개발 중 디버그나 서비스 공격 등이 있을 때 원인을 파악하고자 사용자의 데이터를 분석할 필요가 있다. 그러나 기본적인 access log 에는 사용자가 직접 요청한 POST 등의 데이터는 기록되지 않기 때문에 nginx access log 에 POST 데이터를 기록하도록 해봤다.

우선 nginx.conf 파일의 http 블럭에 아래와 같이 log 포맷을 지정한다.

log_format  request_log '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for" "$request_body"';

마지막 파라미터 $request_body 가 키 포인트이다. 이렇게 설정하고 server 블럭의 access_log 부분을 아래와 같이 수정한다.

access_log  logs/access.log  request_log buffer=32k;

buffer 부분은 접속이 많은 경우에 로그를 버퍼에 저장한 후 기록하도록 하기 위해 추가됐다.

nginx 설정을 변경했다면 service nginx reload 등의 명령을 실행해 설정을 다시 로드한다. 그런 후 access.log 파일에 데이터가 제대로 기록되는지 확인한다.

편리

PHP와 MariaDB, jQuery 등을 사용해 게시판, 쇼핑몰 솔루션을 개발합니다. 그누보드5와 영카트5 개발에 참여 했습니다. Linux와 Nginx는 물론 WordPress, Git 등에도 관심이 많습니다. 자전거 타기 및 사진 촬영을 취미로 하고 있습니다.

카카오톡 플러스친구 채팅 : NCUBE.NET

4 thoughts to “nginx access log 에 POST 데이터 기록하기”

  1. 안녕하세요

    ajax로 실행되는 특정 파일(예를들면 login.php) 만
    post 데이터를 로그에 남기려면 어떻게 해야할까요?
    405에러를 뿜어버리는데 ㅠㅠ

    1. 안녕하세요.
      그런 경우라면 특정파일(login.php)에서 post 데이터를 로그 파일로 남기는 것이 편한 방법인 것 같습니다.

  2. 다시 문의드릴게요
    ajax로 실행되는 특정 파일(예를들면 login.php)만 로그에 post 데이터를 남기게 했더니
    405에러를 뿝습니다.

    1. 지난 번 답변을 오해하신 것 같습니다.
      post 데이터를 login.php 파일에서 로그 파일을 생성한 후 데이터를 기록하도록 하는 것이 nginx access log 에 남기는 방법보다 간단한 방법입니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.