nginx POST data 로깅 남기기


nginx 의 기본 로깅은 용량 문제로 POST 로 전달된 데이타를 남기지 않습니다.

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


아래와 같이 post_logs 라는 log format 을 만들어 주고 여기에 $request_body 변수를 추가하면 POST data 도 로그 파일에 남게 됩니다.

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


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

로그 포맷 생성이 끝났으면 가상 호스트의 access_log 항목에 다음과 같이 설정해 줍니다.

#access_log /var/log/nginx/my-server-access.log combined;
access_log /var/log/nginx/my-server-access.log post_logs;


설정이 끝났으면 nginx 를 재시작하면 반영되고 POST 로 전달된 데이타도 로그 파일에 남게 됩니다.

systemctl restart nginx

POST 데이타를 남기면 로그 파일 용량이 급증하므로 개발이나 테스트 목적을 달성하면 바로 예전 로그 포맷으로 롤백해야 합니다.



Ref