ngnix 접속 기록, 홈페이지 방문자 수 조회
추적 코드 없이 세기
방문자 수를 보려고 분석 도구를 붙일 수도 있었지만 페이지에 남의 스크립트를 하나 더 넣고 싶지 않았음.
웹 서버(nginx)가 이미 요청마다 한 줄씩 기록을 남기고 있으니 그걸 세면 된다고 생각
첫 화면 주소를 부른 요청을 날짜별로 세 보니 하루 80~100개의 서로 다른 IP가 나왔네..?
'사람이 아닌' 요청이 있어서 그런거였다
사람이 브라우저로 첫 화면을 열면 아이콘과 카드 영상도 같이 받아 감
그래서 첫 화면만 받고 아무것도 더 받지 않은 IP를 골라 봤음. 9월 15일 하루, 첫 화면을 부른 IP 84개 중 아이콘이나 영상까지 받아 간 건 4개였음
나머지는 어떤 경우였냐면
- 대부분 클라우드에서 빌린 서버였음. 구글 클라우드, 디지털오션, 알리바바 클라우드.
- 브라우저 이름표는 크롬이나 아이폰으로 꾸며 놨음. 그중 41건은
iPhone OS 13_2_3이었는데, 2019년에 나온 버전임. 진짜 폰이 그렇게 몰려올 리 없음. - 16건은 첫 화면에 POST를 보냈음. HTML 파일만 있는 주소라 사람이 브라우저로 볼 때는 나올 수 없는 요청임.
스캐너가 찾던 것
없는 주소를 두드린 기록을 14일치 모아 보니 목적이 분명했음.
| 두드린 주소 | 14일 동안 |
|---|---|
/wp-admin/install.php | 879번 |
/.env | 149번 |
/xmlrpc.php | 81번 |
워드프레스 설치 화면과 설정 파일임. 설치하다 만 워드프레스를 찾으면 관리자 계정을 가로챌 수
있고, .env에는 보통 데이터베이스 비밀번호와 API 키가 들어 있음. 이 홈페이지는
워드프레스가 아니고 HTML 파일 몇 장이 전부라, 찾는 게 아예 없어서 전부 404로 끝남.
인터넷에 열린 주소라면 어디나 이 정도는 맞음.
세는 방법
그래서 화면이 실제로 열릴 때만 일어나는 일로 방문을 판정하기로 했음.
첫 화면이 열리면 자바스크립트가 카드 목록을 한 번 불러오고, 아이콘과 영상을 받아 감. 스캐너는 자바스크립트를 돌리지 않음.
여기서 한 번 더 틀렸음.
이 규칙으로 다시 세니 그날 방문이 17명으로 나왔는데, 들여다보니 대부분 Googlebot이었음.
구글 검색 로봇은 자바스크립트를 돌리고 아이콘까지 받아 가서 화면 열림 판정을 그대로 통과했음.
로봇은 자기 이름표에 bot이라고 적고 오니까 이름표로 따로 거르게 했음. 이름표를 숨기는
쪽은 어차피 자바스크립트를 안 돌려서 앞 단계에서 걸러짐.
만들면서 우리 쪽에서 스무 번씩 새로고침한 것도 뺐음. 그렇게 남은 숫자가 하루 0~8명...
기록 보관
접속 기록은 14일이 지나면 자동으로 지워짐. 그래서 매시간 기록을 세서 날짜별 숫자만 따로 쌓아 둠. IP는 세는 동안만 쓰고 저장하지 않음. 쌓인 숫자는 방문자 수 페이지에서 볼 수 있음.