Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

Bài 19. Logging & theo dõi truy cập

ICT

1. Vai trò của logging trong hệ thống Reverse Proxy

Trong hệ thống có hàng trăm website và web app, logging không chỉ để “xem cho biết”, mà là:

  • Công cụ phát hiện sớm sự cố,

  • Nền tảng phân tích nguyên nhân khi có lỗi,

  • Cơ sở đánh giá hành vi truy cập và rủi ro bảo mật.

Reverse Proxy là nơi nhìn thấy toàn bộ lưu lượng đi vào hệ thống, vì vậy:

Log tại Reverse Proxy có giá trị cao hơn log ở từng backend riêng lẻ.

Nếu không chuẩn hóa logging ngay từ đầu, khi sự cố xảy ra:

  • Log thiếu thông tin,

  • Không phân biệt được lỗi proxy hay lỗi backend,

  • Không xác định được nguồn truy cập bất thường.


2. Các loại log quan trọng trong Nginx

Nginx có hai loại log chính mà Reverse Proxy cần quan tâm:

2.1. Access log

Ghi nhận:

  • Ai truy cập (IP)

  • Truy cập khi nào

  • Truy cập vào đâu

  • Trạng thái trả về (status code)

2.2. Error log

Ghi nhận:

  • Lỗi kết nối backend

  • Timeout

  • Lỗi SSL

  • Lỗi cấu hình

Hai loại log này bổ trợ cho nhau, không thể thiếu cái nào.


3. Chuẩn hóa format access log cho Reverse Proxy

3.1. Vì sao cần custom log format

Log mặc định của Nginx:

  • Thiếu thời gian xử lý request.

  • Thiếu thông tin upstream (backend).

  • Khó phân tích khi có nhiều web app.

Do đó cần format riêng cho Reverse Proxy.


3.2. Định nghĩa log format chuẩn

Trong /etc/nginx/nginx.conf (block http {}):

log_format proxy_main
   '$remote_addr - $remote_user [$time_local] '
   '"$request" $status $body_bytes_sent '
   '"$http_referer" "$http_user_agent" '
   'rt=$request_time '
   'uct=$upstream_connect_time '
   'urt=$upstream_response_time '
   'uht=$upstream_header_time '
   'upstream=$upstream_addr';
 

Ý nghĩa các trường quan trọng:

TrườngÝ nghĩa
rtTổng thời gian xử lý request
uctThời gian kết nối tới backend
urtThời gian backend trả response
upstream_addrBackend đang phục vụ

3.3. Áp dụng log format cho các site

Trong mỗi server block (hoặc chung cho toàn hệ thống):

 
access_log /var/log/nginx/access.log proxy_main;

Có thể tách log theo nhóm site nếu cần (nâng cao).


4. Theo dõi error log hiệu quả

4.1. Mức log phù hợp

Trong nginx.conf:

 
error_log /var/log/nginx/error.log warn;
  • warn đủ để thấy lỗi quan trọng.

  • Tránh dùng debug trên production.


4.2. Các lỗi cần chú ý trong error log

Thông báoÝ nghĩa
upstream timed outBackend chậm hoặc treo
connect() failedBackend không reachable
no live upstreamsBackend down hoàn toàn
SSL_do_handshake()Lỗi SSL

5. Theo dõi truy cập theo thời gian thực

5.1. Theo dõi access log trực tiếp

 
tail -f /var/log/nginx/access.log

Phù hợp khi:

  • Sự cố đang xảy ra.

  • Kiểm tra nhanh hành vi truy cập.


5.2. Lọc theo trạng thái lỗi

 
grep ' 5[0-9][0-9] ' /var/log/nginx/access.log

Giúp phát hiện:

  • Lỗi backend

  • Lỗi proxy


5.3. Theo dõi theo domain

Nếu dùng nhiều domain chung log:

 
grep 'qlcl.example.com' /var/log/nginx/access.log

6. Phân tích truy cập bất thường

6.1. IP truy cập nhiều bất thường

 
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head 

Dùng để:

  • Phát hiện scan

  • Phát hiện brute-force


6.2. URL bị truy cập nhiều bất thường

 
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head 

7. Log và Cloudflare: lưu ý đặc biệt

Khi dùng Cloudflare:

  • $remote_addr là IP Cloudflare.

  • IP thật nằm trong CF-Connecting-IP.

Chỉ khi đã cấu hình real_ip_header CF-Connecting-IP đúng, log mới phản ánh IP thật.

Nếu chưa, phân tích log sẽ sai hoàn toàn.


8. Log rotation – tránh đầy đĩa

8.1. Kiểm tra logrotate cho Nginx

 
ls /etc/logrotate.d/nginx

Thông thường Debian đã có sẵn.


8.2. Không tắt log để “đỡ đầy đĩa”

  • Log đầy → xử lý bằng rotation.

  • Tắt log → mù khi có sự cố.


9. Checklist logging cho Reverse Proxy

  •  Access log có request_timeupstream_*

  •  Error log mức warn

  •  Logrotate hoạt động

  •  Real IP đúng khi dùng Cloudflare

  •  Biết các câu lệnh lọc log cơ bản


Kết luận

Logging & theo dõi truy cập giúp Reverse Proxy:

  • Nhìn thấy vấn đề trước khi người dùng phàn nàn,

  • Phân biệt rõ lỗi proxy hay lỗi backend,

  • Đưa ra quyết định failover dựa trên dữ liệu, không cảm tính.