Nginx Log 설정
전 블로그에서 Nginx 설치부터 실행까지 알아보았다.
2021.12.14 - [Web] - AWS EC2 웹 서버 nginx 설치, 설정 부터 실행까지 ( 프리티어 )
Nginx는 http요청에 대한 access.log, error.log를 default로 기록한다. 본 블로그에서 로그가 기록되는 위치를 변경하고, 로그 형식(format)에 대한 기본 개념을 이해하고 주요 내장 변수 값에 대해 알아본다.
준비사항
- 전 블로그에서 진행한 환경셋팅
- Putty
nginx.conf
Nginx의 설정파일은 nginx.conf에 설정된다. include 옵션을 사용, 관심사를 분리하여 유연한 관리가 가능하다. 우선 access / error 로그가 적재되는 경로를 /LOG/nginx 로 수정해보자.
! root 유저로 진행한다.
/etc/nginx/nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
- error_log 와 access_log의 위치가 /va/log/nginx/ 에 위치한걸 확인 할 수 있다.
- access_log는 main 이름(alias)로 설정된 log_format의 format으로 로그를 기록한다.
- log_format 에서 사용되는 $으로 시작되는 변수들은 nginx에서 기본으로 제공하는 변수, 혹은 사용자 변수를 지정할 수 있다.
로그 위치 변경
다음처럼 위치를 변경하고 nginx.conf를 저장한다.
error_log /LOG/nginx/error.log;
access_log /LOG/nginx/access.log main;
대상 디렉토리를 생성한다.
mkdir -p /LOG/nginx
Nginx 설정파일 리로드(reload)
nginx -s reload 명령을 사용하여 gracefully하게 설정을 리로드 한다. reload 명령은 서버 중지 없이 설정을 리로드하여 패킷 손실을 방지할 수 있다. ( 무중단 설정 반영 )
[root@ip-172-31-32-189 nginx]# nginx -s reload
[root@ip-172-31-32-189 nginx]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 16 00:52 access.log
-rw-r--r-- 1 root root 0 Dec 16 00:52 error.log
위 처럼 access / error 로그가 생성되었다. 퍼블릭 DNS로 접속하여 access.log에 제대로 기록되는지 확인하자.
/LOG/nginx/access.log
106.101.2. - - [16/Dec/2021:00:54:44 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36" "-"
106.101.2. - - [16/Dec/2021:00:54:53 +0000] "GET /test HTTP/1.1" 404 3665 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36" "-"
- 존재하지 않는 경로(/test)는 404(Not found)를 출력했다.
/LOG/nginx/error.log
위에서 존재하지 않는 경로 접근에 대한 error.log 기록이다.
2021/12/16 00:54:53 [error] 15389#15389: *174 open() "/usr/share/nginx/html/test" failed (2: No such file or directory), client: 106.101.2., server: _, request: "GET /test HTTP/1.1", host: "ec2-54-180-.ap-northeast-2.compute.amazonaws.com"
오류 로그 설정
error_log가 설정된 /etc/nginx/nginx.conf파일을 다음과 같이 로그 레벨을 설정할 수 있다.
로그 레벨은 심각도 순으로 다음 8단계로 이루어져있다.
debug < info < notice < warn < error (default) < crit < alert < emerg
error_log /LOG/nginx/error.log debug;
설정파일 변경 후 nginx -s reload하여 적용한다.
로그 포맷(log_format) 설정
/etc/nginx/nginx.conf
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /LOG/nginx/access.log main;
- main 이름을 갖는 log_format이 access_log에 설정된 상태
- log_format지시자는 http 영역안에서만 정의 가능
- location 안에 지정하여 사용할 수 있다. ( 특정 uri 접근에 대한 로깅 시 )
주요 로그 내부 변수
- $remote_addr - Server에 접근한 IP주소
- $time_local - 다음 포맷을 갖는 시간을 출력한다. 16/Dec/2021:00:54:44 +0000
- $request - request_method + http 버전
- $request_method - "GET", "POST"
- $status - 요청에 대한 응답 HTTP Code
- $request_body - 요청의 body를 출력한다. POST 요청에 대한 값 확인
- $http_user_agent - 클라이언트 정보 출력 ( Chrome, Postman 등 )
- 이 외 인증서에 관한 정보들은 $ssl_ 시작되는 내장 변수를 사용하여 확인할 수 있다.
- $ssl_client_cert - 클라이언트 인증서의 cert 정보
- $ssl_client_fingerprint - 클라이언트 인증서의 지문정보
- $ssl_client_i_dn - 인증서 발행 주체의 dn 값
- $ssl_client_s_dn - 인증서 소유자의 dn 값
'Web Programming' 카테고리의 다른 글
카프카(kafka) - Docker + 카프카 클러스터 구축 및 토픽생성, 메시지 전송 (0) | 2021.12.31 |
---|---|
카프카(kafka) 개요 - 주요 용어 개념 정리 (0) | 2021.12.27 |
AWS EC2 웹 서버 nginx 설치, 설정 부터 실행까지 ( 프리티어 ) (0) | 2021.12.14 |
Spring boot - Log4j 2.x 취약점 (ldap, jndi공격) 현상 및 해결방법 (0) | 2021.12.13 |
eslint 커맨드를 찾지 못하는 경우 ( esline --init 오류 ) (0) | 2021.08.14 |