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 파일에 데이터가 제대로 기록되는지 확인한다.
안녕하세요
ajax로 실행되는 특정 파일(예를들면 login.php) 만
post 데이터를 로그에 남기려면 어떻게 해야할까요?
405에러를 뿜어버리는데 ㅠㅠ
안녕하세요.
그런 경우라면 특정파일(login.php)에서 post 데이터를 로그 파일로 남기는 것이 편한 방법인 것 같습니다.
다시 문의드릴게요
ajax로 실행되는 특정 파일(예를들면 login.php)만 로그에 post 데이터를 남기게 했더니
405에러를 뿝습니다.
지난 번 답변을 오해하신 것 같습니다.
post 데이터를 login.php 파일에서 로그 파일을 생성한 후 데이터를 기록하도록 하는 것이 nginx access log 에 남기는 방법보다 간단한 방법입니다.