웹 서버를 운영하다 보면 방문자가 어떤 페이지를 요청했는지, 서버가 정상적으로 응답했는지 확인해야 하는 상황이 생깁니다. 이때 활용할 수 있는 가장 기본적인 자료가 바로 Nginx 접속 로그(Access Log)입니다.
Nginx 접속 로그를 분석하면 방문자의 요청 URL, 접속 시간, HTTP 상태 코드, 전송 데이터 크기 등 웹 서버에서 발생한 다양한 요청 정보를 확인할 수 있습니다. 특히 웹사이트 오류를 찾거나 서버 상태를 점검할 때 매우 유용합니다.
이번 글에서는 Nginx 접속 로그의 기본 개념부터 실제 로그 확인 방법, HTTP 상태 코드 분석 방법까지 단계별로 알아보겠습니다.
Nginx 접속 로그란?

Nginx 접속 로그는 웹 서버에 들어온 HTTP 요청을 기록한 파일입니다.
사용자가 웹 브라우저에서 특정 페이지에 접속하면 Nginx는 해당 요청에 대한 정보를 로그에 남깁니다. 따라서 접속 로그를 확인하면 서버에서 어떤 요청이 발생했는지 시간순으로 파악할 수 있습니다.
일반적인 Nginx 환경에서는 다음과 같은 위치에서 접속 로그를 확인할 수 있습니다.
/var/log/nginx/access.log
운영 환경에 따라 로그 파일의 위치가 다를 수 있으므로 Nginx 설정 파일에서 access_log 항목을 확인하는 것이 정확합니다.
Nginx 접속 로그의 기본 형식
기본적인 Nginx 접속 로그는 다음과 비슷한 형태로 기록됩니다.
192.168.0.10 - - [13/Sep/2026:19:30:10 +0900] "GET /index.html HTTP/1.1" 200 1250
각 항목은 다음과 같은 의미를 가집니다.
- 192.168.0.10: 요청을 보낸 클라이언트의 IP 주소
- [13/Sep/2026:19:30:10 +0900]: 요청이 발생한 시간
- GET: HTTP 요청 방식
- /index.html: 요청한 URL
- HTTP/1.1: 사용한 HTTP 프로토콜
- 200: 서버가 반환한 HTTP 상태 코드
- 1250: 응답 데이터의 크기
이러한 정보를 조합하면 방문자가 언제 어떤 페이지를 요청했으며 서버가 어떻게 응답했는지 확인할 수 있습니다.
Nginx 접속 로그 확인하기
리눅스 서버에서 Nginx 접속 로그를 확인하려면 다음 명령어를 사용할 수 있습니다.
sudo tail -f /var/log/nginx/access.log
tail -f 명령어는 새로운 로그가 기록될 때마다 실시간으로 화면에 보여줍니다.
특정 시점의 로그만 확인하려면 다음과 같이 사용할 수도 있습니다.
sudo tail -n 100 /var/log/nginx/access.log
위 명령은 최근 100개의 로그를 보여줍니다.
전체 로그를 확인하려면 다음과 같이 사용할 수 있습니다.
sudo less /var/log/nginx/access.log
로그의 양이 많은 서버에서는 전체 파일을 한꺼번에 확인하기보다 필요한 기간이나 상태 코드만 필터링하는 것이 효율적입니다.
HTTP 상태 코드란?
Nginx 접속 로그를 분석할 때 가장 중요하게 확인해야 할 항목 중 하나가 HTTP 상태 코드입니다.
HTTP 상태 코드는 서버가 클라이언트의 요청을 처리한 결과를 숫자로 나타냅니다.
대표적인 상태 코드는 다음과 같습니다.
200 OK
200은 요청이 정상적으로 처리되었다는 의미입니다.
예를 들어 방문자가 홈페이지를 요청했고 서버가 정상적으로 페이지를 전달했다면 다음과 같이 기록될 수 있습니다.
"GET / HTTP/1.1" 200
웹사이트가 정상적으로 작동하고 있는지 확인할 때 가장 기본적으로 살펴볼 수 있는 상태 코드입니다.
301 Moved Permanently
301은 요청한 주소가 다른 주소로 영구적으로 이동했다는 의미입니다.
도메인을 변경했거나 HTTP에서 HTTPS로 연결을 변경하는 과정에서 자주 볼 수 있습니다.
301 리다이렉션이 너무 많이 발생하면 불필요한 이동이 반복되는 구조가 없는지 확인하는 것이 좋습니다.
302 Found
302는 임시 리다이렉션을 나타냅니다.
로그에서 302 응답이 많이 발견된다면 로그인 페이지나 특정 서비스의 임시 이동 등 사이트 구조에 따른 정상적인 요청인지 확인할 필요가 있습니다.
400 Bad Request
400은 서버가 요청을 제대로 이해하지 못했을 때 발생합니다.
잘못된 URL이나 비정상적인 요청이 반복되는 경우 로그에서 확인할 수 있습니다.
401 Unauthorized
401은 인증이 필요한 리소스에 인증 없이 접근했을 때 주로 발생합니다.
관리자 페이지나 API 등 접근 권한이 필요한 영역을 운영한다면 관련 요청을 확인하는 데 도움이 됩니다.
403 Forbidden
403은 서버가 요청을 이해했지만 접근을 허용하지 않는다는 의미입니다.
파일이나 디렉터리 권한 설정이 잘못되었거나 Nginx 접근 제한 설정 때문에 발생할 수 있습니다.
404 Not Found
404는 요청한 페이지나 파일을 찾을 수 없다는 의미입니다.
Nginx 로그를 분석할 때 특히 관심 있게 확인할 필요가 있는 상태 코드입니다.
예를 들어 다음과 같은 요청이 반복된다면 실제로 존재하지 않는 URL을 방문하고 있는 것입니다.
"GET /old-page.html HTTP/1.1" 404
삭제된 페이지나 변경된 URL 때문에 404가 발생한다면 적절한 리다이렉션이나 링크 수정을 검토할 수 있습니다.
500 Internal Server Error
500은 서버 내부에서 문제가 발생했다는 의미입니다.
애플리케이션 오류, 서버 설정 문제 또는 백엔드 프로그램의 문제 등 다양한 원인으로 발생할 수 있습니다.
500 오류가 반복된다면 접속 로그뿐만 아니라 Nginx의 에러 로그도 함께 확인해야 합니다.
HTTP 상태 코드별 요청 수 확인하기
Nginx 로그에서 특정 상태 코드가 얼마나 발생했는지 확인하면 웹사이트의 문제를 빠르게 파악할 수 있습니다.
예를 들어 awk를 사용하면 상태 코드별 발생 횟수를 집계할 수 있습니다.
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
결과는 다음과 비슷한 형태로 나타날 수 있습니다.
850 200
120 404
35 301
10 500
이 경우 정상 응답인 200이 가장 많고, 404 오류도 일정 부분 발생하고 있다는 것을 알 수 있습니다.
500 오류가 갑자기 증가한다면 서버 또는 웹 애플리케이션에 문제가 발생했을 가능성을 우선적으로 확인하는 것이 좋습니다.
404 오류가 발생한 URL 찾기
404 오류를 발생시킨 요청을 확인하면 어떤 페이지에서 문제가 발생하고 있는지 파악할 수 있습니다.
다음 명령어를 활용할 수 있습니다.
grep ' 404 ' /var/log/nginx/access.log
최근 404 오류만 확인하려면 다음처럼 사용할 수도 있습니다.
grep ' 404 ' /var/log/nginx/access.log | tail -n 50
이를 통해 존재하지 않는 페이지를 반복적으로 요청하는 URL을 확인할 수 있습니다.
방문자의 요청 URL 확인하기
접속 로그에는 방문자가 요청한 URL도 기록됩니다.
다음 명령어를 이용하면 요청 URL을 기준으로 간단한 분석을 할 수 있습니다.
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
이 명령어는 어떤 URL에 요청이 많이 발생했는지 확인하는 데 사용할 수 있습니다.
예를 들어 특정 페이지의 요청 수가 다른 페이지보다 월등히 높다면 해당 페이지가 많은 방문자의 관심을 받고 있거나 외부 서비스에서 반복적으로 요청하고 있을 가능성이 있습니다.
Nginx 접속 로그로 비정상 요청 확인하기
접속 로그는 단순한 방문자 통계뿐만 아니라 비정상적인 요청을 확인하는 데도 활용할 수 있습니다.
예를 들어 존재하지 않는 관리자 페이지를 반복적으로 요청하거나 특정 URL에 짧은 시간 동안 매우 많은 요청이 들어오는 경우 로그에서 패턴을 확인할 수 있습니다.
다만 IP 주소 하나만 보고 공격 여부를 단정해서는 안 됩니다. 검색 엔진 크롤러, 모니터링 시스템, 정상적인 API 요청 등도 반복적인 접속을 만들 수 있기 때문입니다.
따라서 요청 URL, 상태 코드, 요청 빈도, User-Agent 등의 정보를 함께 살펴보는 것이 좋습니다.
Nginx 접속 로그와 에러 로그의 차이
Nginx에는 접속 로그뿐만 아니라 에러 로그(Error Log)도 있습니다.
접속 로그는 주로 어떤 요청이 들어왔고 서버가 어떤 HTTP 상태 코드를 반환했는지 확인하는 데 사용합니다.
반면 에러 로그는 서버에서 발생한 오류의 원인을 파악하는 데 더 유용합니다.
일반적인 에러 로그 위치는 다음과 같습니다.
/var/log/nginx/error.log
예를 들어 접속 로그에서 500 오류를 발견했다면 에러 로그를 함께 확인하여 실제 오류 원인을 추적할 수 있습니다.
로그 분석 시 주의할 점
Nginx 로그에는 방문자의 IP 주소와 User-Agent 등 다양한 정보가 포함될 수 있습니다. 따라서 로그를 외부에 공개하거나 다른 사람에게 공유할 때는 개인정보 및 보안 정보를 주의해서 처리해야 합니다.
또한 로그 파일은 시간이 지나면서 매우 큰 크기로 증가할 수 있습니다.
운영 서버에서는 logrotate 등을 이용해 로그 파일을 적절하게 관리하는 것이 좋습니다.
로그를 무조건 오래 보관하기보다는 서비스에 필요한 보관 기간을 정하고 정기적으로 관리하면 디스크 공간 부족 문제도 예방할 수 있습니다.
Nginx 접속 로그 분석이 중요한 이유
Nginx 접속 로그는 웹사이트 운영 상태를 파악할 수 있는 중요한 자료입니다.
로그를 정기적으로 확인하면 다음과 같은 문제를 발견하는 데 도움이 됩니다.
- 정상적으로 처리되는 요청 확인
- 404 페이지 증가 여부 확인
- 500 서버 오류 확인
- 리다이렉션 문제 확인
- 반복적인 비정상 요청 확인
- 특정 URL의 요청량 확인
- 서버 장애 발생 시 원인 추적
특히 웹사이트의 페이지가 정상적으로 노출되고 있는지 확인하려면 HTTP 상태 코드를 이해하는 것이 중요합니다.
마무리
Nginx 접속 로그 분석은 처음에는 복잡해 보일 수 있지만 기본적인 로그 구조와 HTTP 상태 코드만 이해해도 상당 부분을 직접 확인할 수 있습니다.
가장 먼저 access.log에서 요청 시간, 요청 URL, HTTP 상태 코드를 확인하고, 200, 301, 302, 404, 500 등의 상태 코드가 어떤 의미인지 파악하는 것이 좋습니다.
특히 404 오류가 반복되는 페이지와 500 오류가 발생하는 요청을 찾아 원인을 해결하면 웹사이트의 안정적인 운영에 도움이 됩니다.
Nginx를 사용하는 웹사이트라면 접속 로그를 단순히 서버에 쌓이는 기록으로 생각하기보다 웹사이트의 상태를 확인하는 운영 데이터로 활용하는 것이 좋습니다.
로그를 꾸준히 분석하는 습관을 들이면 방문자의 요청 흐름을 이해하고 웹사이트에서 발생하는 오류를 보다 빠르게 발견할 수 있습니다.