SW/리눅스

Linux : Nginx 에러, 액세스 로그 구성 방법, 예제, 명령어

얇은생각 2022. 3. 25. 07:30
반응형

Nginx는 인터넷에서 가장 큰 사이트 중 일부를 처리하는 오픈 소스, 고성능 HTTP 및 리버스 프록시 서버입니다. NGINX 웹 서버를 관리할 때 가장 자주 수행할 작업 중 하나는 로그 파일을 확인하는 것입니다. 

로그 구성 및 읽기 방법을 알면 자세한 디버깅 정보를 제공하기 때문에 서버 또는 애플리케이션 문제를 해결할 때 매우 유용합니다.

Nginx는 이벤트 레코드를 액세스 로그와 오류 로그의 두 가지 유형의 로그에 기록합니다. 액세스 로그는 클라이언트 요청에 대한 정보를 쓰고 오류 로그는 서버 및 응용 프로그램 문제에 대한 정보를 씁니다.

Nginx 액세스 및 오류 로그를 구성하고 읽는 방법에 대해 설명합니다.

 

 

Linux : Nginx 에러, 액세스 로그 구성 방법, 예제, 명령어

 

 

액세스 로그를 구성

클라이언트 요청이 처리될 때마다 Nginx는 액세스 로그에 새 이벤트를 생성합니다. 각 이벤트 레코드에는 타임스탬프가 포함되어 있으며 클라이언트 및 요청된 리소스에 대한 다양한 정보가 포함되어 있습니다. 액세스 로그는 방문자의 위치, 방문하는 페이지, 페이지에서 보내는 시간 등을 보여줍니다.

log_format 지시문을 사용하여 기록된 메시지의 형식을 정의할 수 있습니다. access_log 지시어는 로그 파일의 위치와 사용된 형식을 활성화하고 설정합니다.

access_log 지시어의 가장 기본적인 구문은 다음과 같습니다.

access_log log_file log_format;

 

 

여기서 log_file은 로그 파일의 전체 경로이고 log_format은 로그 파일에서 사용하는 형식입니다. 

접근 로그는 http, 서버 또는 위치 지시 블록에서 사용할 수 있습니다.

기본적으로 액세스 로그는 주 Nginx 구성 파일 내의 http 지시어에서 전체적으로 활성화됩니다.

# /etc/nginx/nginx.conf

http {
  ...
  access_log  /var/log/nginx/access.log;
  ...
}

 

 

가독성을 높이기 위해 각 서버 블록에 대해 별도의 액세스 로그 파일을 설정하는 것이 좋습니다. 서버 지시문에 설정된 access_log 지시문은 http(상위 수준) 지시문에 설정된 지시문을 재정의합니다.

# /etc/nginx/conf.d/domain.com.conf

http {
  ...
  access_log  /var/log/nginx/access.log;
  ...

  server {
    server_name domain.com
    access_log  /var/log/nginx/domain.access.log;
    ...
  }
}

 

 

로그 형식이 지정되지 않은 경우 Nginx는 다음과 같은 미리 정의된 결합 형식을 사용합니다.

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

 

 

로깅 형식을 변경하려면 기본 설정을 재정의하거나 새 형식을 정의합니다. 예를 들어 X-Forwarded-For 헤더를 표시하는 값으로 결합된 형식을 확장하는 사용자 정의라는 새 로깅 형식을 정의하려면 http 또는 서버 지시어에 다음 정의를 추가합니다.

log_format  custom  '$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 custom;

 

 

액세스 로그는 매우 유용한 정보를 제공하지만 디스크 공간이 필요하고 서버 성능에 영향을 미칠 수 있습니다. 서버에 리소스가 부족하고 사용 중인 웹 사이트가 있는 경우 액세스 로그를 비활성화할 수 있습니다. 이렇게 하려면 access_log 지시어의 값을 off로 설정합니다.

access_log  off;

 

 

 

오류 로그를 구성

Nginx는 오류 로그 파일에 응용 프로그램 및 일반 서버 오류에 대한 메시지를 작성합니다. 웹 응용 프로그램에 오류가 발생하는 경우 문제 해결을 위해 오류 로그가 가장 먼저 시작됩니다.

error_log 지시어는 오류 로그의 위치와 심각도 수준을 활성화하고 설정합니다. 다음 양식을 사용하며, http, 서버 또는 위치 블록 내에서 설정할 수 있습니다.

error_log log_file log_level

 

 

log_level 매개 변수는 로깅 수준을 설정합니다. 다음은 심각도(낮음에서 높음)별로 나열된 수준입니다. 

debug - 메시지를 디버깅하고 있습니다.

info - 정보 메시지입니다.

notice - 통지입니다.

warn - 경고입니다.

error - 요청을 처리하는 동안 오류가 발생했습니다.

crit  - 중대한 문제입니다. 신속한 작업이 필요합니다.

warn - 경고입니다. 즉시 조치를 취해야 합니다.

emrg - 응급 상황입니다. 시스템을 사용할 수 없는 상태입니다.

 

각 로그 수준에는 상위 수준이 포함됩니다. 예를 들어, 로그 단계를 경고로 설정하면 Nginx는 오류, 위험, 경보 및 긴급 메시지도 기록합니다.

log_level 매개 변수를 지정하지 않으면 기본적으로 오류가 발생합니다. 

기본적으로 error_log 지시어는 주 nginx.conf 파일 내의 http 지시어에 정의됩니다.

# /etc/nginx/nginx.conf

http {
  ...
  error_log  /var/log/nginx/error.log;
  ...
}

 

 

액세스 로그와 마찬가지로 각 서버 블록에 대해 별도의 오류 로그 파일을 설정하는 것이 좋습니다. 이 파일은 상위 수준에서 상속된 설정을 재정의합니다.

예를 들어 domain.com' 오류 로그를 경고로 설정하려면 다음을 사용합니다.

http {
  ...
  error_log  /var/log/nginx/error.log;
  ...

  server {
    server_name domain.com
    error_log  /var/log/nginx/domain.error.log warn;
    ...
  }
}

 

 

구성 파일을 수정할 때마다 변경 사항을 적용하려면 Nginx 서비스를 다시 시작해야 합니다.

 

 

 

로그 파일의 위치

Ubuntu , CentOS 및 Debian과 같은 대부분의 Linux 배포판에서는 기본적으로 액세스 및 오류 로그가 /var/log/nginx 디렉토리에 있습니다.

 

 

 

Nginx 로그 파일을 읽고 이해

당신은 cat, less, grep, cut, awk 등과 같은 표준 명령을 사용하여 로그 파일을 열고 구문 분석할 수 있습니다.

다음은 기본 결합 Nginx 로그 형식을 사용하는 액세스 로그 파일의 예제 레코드입니다.

192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

 

 

레코드의 각 필드가 무엇을 의미하는지 살펴보겠습니다. 

$remote_addr - 192.168.33.1 - 요청을 하는 클라이언트의 IP 주소입니다.

$remote_user - - - HTTP 인증 사용자입니다. 사용자 이름이 설정되지 않은 경우 이 필드에는 -가 표시됩니다.

[$time_local] - [15/Oct/2019:41:46 +0000] - 로컬 서버 시간입니다.

"$request" - "GET / HTTP/1.1" - 요청 유형, 경로 및 프로토콜입니다.

$status - 200 - 서버 응답 코드입니다.

$body_bytes_sent - 396 - 서버 응답 크기(바이트)입니다.

"$http_referer" - "-" - 조회 URL입니다.

"$http_user_agent" - Mozilla/5.0 ... - 클라이언트의 사용자 에이전트(웹 브라우저)입니다.

 

tail 명령을 사용하여 로그 파일을 실시간으로 감시합니다.

tail -f  access.log

 

 

로그 파일은 서버 문제와 방문자가 웹 사이트와 상호 작용하는 방식에 대한 유용한 정보를 제공합니다. 

Nginx를 사용하면 필요에 따라 액세스 및 오류 로그를 구성할 수 있습니다.

반응형