개발
백엔드

Nginx 서버 로그 기록 설정 및 커스터마이징

Nginx 서버를 운용하다보면 참 여러가지 서버 트래픽이 발생한다.

제일 무난한 관리방법은 역시 모든 엑세스에 대해서 철저하게 로깅해놓고 지속적으로 모니터링하면서 필요한 타이밍에 제어를 하는것이다.

경험이 많으신 서버 관리자는 더 효율적인 방법과 자료로 질이 나쁜 트래픽이나 엑세스 요청을 유효하게 거르시겠지만 나같은 경우에는 이미 실서비스를 운용하면서 맨땅에 헤딩하는식으로 이런 자료과 경험을 쌓아가야해서 자연적으로 로깅을 잘하고 모니터링할 수 있는 환경을 구축하는것이 중요했다.

뭐 거두절미하고 관련 설정을 여기에 기록해보자한다.

http {    
    ...
 
    # log_format 설정
    log_format main '[$time_local] $remote_addr "$host" '
                '"$request" $status $body_bytes_sent "$http_referer" '
                '"$http_user_agent"';
 
    access_log /var/log/nginx/access.log main;
 
    # 특정 확장자에 대한 로그 비활성화 설정
    map $request_uri $loggable {
       "~*^.+\.(jpg|jpeg|png|gif|css|js|map|svg|ico|woff|woff2|ttf|eot)(\?.*)?$"  0;  # 해당 파일 확장자일 때 0 (로그 비활성화)
        default                                                                     1;  # 그 외 요청일 때는 1 (로그 활성화)
    }
 
    # 로그 비활성화 조건을 모든 서버에 적용
    access_log /var/log/nginx/access.log main if=$loggable;
 
    ...
Copy

참 여러번 수정한 nginx.conf 로그 설정이다.

우선 로그라는것은 보기 좋아야하므로 로그를 아래와 같은 순서로 나오게 조율했다.

1.[타임스탬프]
2.접속자IP
3.요청Domain
4.요청내용(Method, URI, Protocol)
5.HTTP응답코드
6.응답바이트
7.이전URL
8.유저에이전트

[09/Oct/2024:20:59:56 +0000] 0.0.0.0 "domain.or.kr" "GET / HTTP/1.1" 200 158303 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
[09/Oct/2024:20:59:57 +0000] 0.0.0.0 "domain.com" "GET /spb3/sboard3/write.php?db=regist&page=3&mode=write&time=1549556661 HTTP/1.1" 301 169 "-" "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)"Copy

실제로 찍히는 access.log 데이터는 위와 같다. (아이피정보랑 도메인명은 바꿨습니다)

이 내용을 이제 적절히 파싱해서 쓰면 적절한 모니터링을 할 수 있는 정보가 생성되는 것이다.

나같은 경우는 이 로그정보를 하루에 한번씩 주기적으로 1000개 정도를 짤라내서 ERP 내부에서 조회할 수 있게 파싱한다음에 아래와같이 표로 출력해서 모니터링 한다.

본문 이미지위 로그파일을 가져와서 배열로 파싱한 후 테이블로 랜더링

주로 이상한 URI로 요청하는 엑세스나 유저 에이전트 검사를 통해 과도하게 크롤링을 하는 봇들을 추려서 아이피 차단을 걸곤한다.

AWS IP 차단 방법 (서버 아이피 차단) - eruLabo
AWS IP 차단 방법 (서버 아이피 차단) - eruLabo
기존에 웹 서버 단계에서 아이피를 차단하는 방법을 기록한 적이 있다. 이 방법의 단점은 일일히 서버 설정을 열어서 차단해야된다는 문제가 있고, 서버 단에서 엑세스 거부를 날리기 때문에 웹서버 자체가 일단 접...
https://erulabo.com/184

지금 상상으로는 이런 서버 엑세스로그에 AI를 접목시켜서 알아서 이상건을 추려내는 그런 시스템을 떠올리기는하는데 최소한의 자원으로 이런 내용을 어떻게 구현할지 참 고민이 많긴하다.

어찌되었든 터미널화면에서 모니터링을 이제 안해도된다라는거는 나에겐 행복한일인건 분명하다.
#Nginx
0 개의 댓글
백엔드 콜렉션의 다른 글
개발 카테고리의 다른 글
라라벨 AWS SDK를 설치했을때 나오는 PHP 버전 에러 우회 방법
10/10/2024
라라벨 AWS SDK를 설치했을때 나오는 PHP 버전 에러 우회 방법
라라벨 프로젝트에 AWS SDK를 설치하니 기존에 S3 Storage를 쓰던곳에서 아래와 같은 에러 메시지가 나왔다. 뭐 쉽게말하면 AWS-SDK-PHP가 현재 운용중인 php 버전과 자신들의 sdk 버전에서 필요한 php 버전이 차이가 나니 그부분을 메꾸라는 에러메시지이다. 근데문제는 라이브 서비스중인 환경에서는 이런 버전업은 많이...
10/10/2024
AWS IP 차단 방법 (서버 아이피 차단)
기존에 웹 서버 단계에서 아이피를 차단하는 방법을 기록한 적이 있다. 이 방법의 단점은 일일히 서버 설정을 열어서 차단해야된다는 문제가 있고, 서버 단에서 엑세스 거부를 날리기 때문에 웹서버 자체가 일단 접근은 허용한 이후에 삭제한다는 특징을 가지고있다. 그러다보니 결국 엑세스가 거부되도 서버 자체가 부하를...
라라벨 에러 페이지(404, 500) 수정 및 커스터마이징
10/10/2024
라라벨 에러 페이지(404, 500) 수정 및 커스터마이징
네이티브하게 웹을 구현한다면 기본적으로 Nginx 에러메시지가 뜨겟지만, 프레임워크를 사용하면 에러페이지도 프레임워크용 에러페이지로 제공된다. 라라벨 프로젝트에서 기본적으로 에러 페이지는 아래와 같이 나타난다. 디폴트 에러 페이지 이 에러페이지는 라라벨 vendor 내부의 미리 정의된 뷰 파일을 이용해 랜더링...
×