서버 운영
Nginx access 로그로 요청이 실제로 오는지 확인하는 방법
배포 후 응답이 이상하거나 트래픽이 예상대로 오는지 모를 때 Nginx access 로그를 실시간으로 보면 빠르게 파악할 수 있다.
서버를 새로 설정하거나 리버스 프록시를 바꾼 뒤 요청이 제대로 들어오는지 확인하고 싶을 때, 가장 직접적인 방법은 Nginx access 로그를 실시간으로 보는 것이다.
access 로그 위치
기본 설치 기준으로 Nginx의 access 로그는 여기에 있다.
/var/log/nginx/access.log
가상 호스트를 설정한 경우 각 서버 블록에 access_log 지시자가 따로 지정돼 있을 수 있다.
server {
server_name example.com;
access_log /var/log/nginx/example.access.log;
}
어디에 있는지 모르면 아래로 찾는다.
grep -r 'access_log' /etc/nginx/
실시간으로 보는 방법
sudo tail -f /var/log/nginx/access.log
-f 옵션은 파일에 새 줄이 추가될 때마다 화면에 출력한다. 브라우저에서 페이지를 열거나 curl로 요청을 보내면 바로 줄이 찍히는 걸 볼 수 있다.
특정 경로 요청만 보고 싶으면 grep을 붙인다.
sudo tail -f /var/log/nginx/access.log | grep '/api/'
로그 한 줄이 의미하는 것
기본 로그 형식(combined)은 이렇게 생겼다.
1.2.3.4 - - [01/Jun/2024:12:34:56 +0900] "GET /api/posts HTTP/1.1" 200 1234 "-" "curl/8.1.2"
| 위치 | 의미 |
|---|---|
1.2.3.4 | 요청자 IP |
[01/Jun...] | 요청 시각 |
"GET /api/posts HTTP/1.1" | 메서드, 경로, 프로토콜 |
200 | 응답 상태 코드 |
1234 | 응답 바이트 수 |
| 마지막 큰따옴표 | User-Agent |
상태 코드가 502면 upstream(백엔드)이 응답하지 않는 것이고, 404면 Nginx 설정에서 해당 경로를 처리하는 location 블록이 없는 것이다.
요청이 아예 안 오는 경우
tail -f를 켜두고 브라우저에서 접속해도 아무것도 찍히지 않는다면 Nginx 앞단 문제다.
# Nginx가 실행 중인지
sudo systemctl status nginx
# 80, 443 포트가 열려 있는지
sudo ss -lntp | grep nginx
# 방화벽에서 포트가 허용됐는지
sudo ufw status
Nginx가 돌고 있는데 로그도 없고 응답도 없다면 DNS가 이 서버를 가리키지 않거나 방화벽에서 막히는 경우가 많다. curl -v http://서버IP로 도메인 없이 직접 IP로 테스트해보면 DNS 문제인지 서버 문제인지 구분할 수 있다.