Cấu hình Nginx ghi log thông tin header HTTP

Cấu hình Nginx ghi log thông tin header HTTPCuongquach.com | Như bạn biết thì với dịch vụ Web Server Nginx thì luôn thường ghi log các định dạng khá là đầy đủ và cơ bản. Nhưng sẽ có những trường hợp bạn muốn ghi log cụ thể cả các giá trị khác của 1 kết nối HTTP như thông tin các header chẳng hạn, ví dụ bao gồm cả header API giữa các ứng dụng thì làm sao đây ?! May thay chúng ta có thể sử dụng một giải pháp thú vị là dùng Lua engine để code một đoạn script (lua script) nhỏ tích hợp với Nginx xử lý ghi log header HTTP.

cau-hinh-nginx-log-header-http

Cấu hình Nginx ghi log thông tin header HTTP

Điều kiện là Nginx Web Server của bạn phải cài đặt Lua tích hợp, bạn có 2 cách để cài đặt Lua engine tích hợp với Nginx :

  • Sử dụng Open Source OpenResty, fork từ Nginx tích hợp Lua nâng cao : https://openresty.org/en/
  • Tự biên dịch Lua engine với mã nguồn Nginx Web Server khi build dịch vụ Nginx.

Cả 2 cách này các bạn có thể google cách cài đặt, cũng không khó khăn gì nhiều.

Một số ứng dụng khác có thể thực hiện với Lua Script Nginx:

  • Ghi log request header, response header, request body POST, response body,..
  • Xử lý các request như một ứng dụng Gateway, do khả năng code Lua script tương tác trực tiếp với các thành phần kết nối tiếp nhận ở Nginx.

Bước 1: tạo đoạn script Lua giúp ghi thông tin header kết nối HTTP ra một biến mang tên ‘$request_headers‘. Biến này sẽ được sử dụng để ghi log. Tham khảo về ‘ngx.req.get_headers()‘ : Link

# mkdir -p /etc/nginx/lua/
# cd /etc/nginx/lua/
# vi log-headers-http.lua
local h = ngx.req.get_headers()
local request_headers_all = ""
for k, v in pairs(h) do
    request_headers_all = request_headers_all .. ""..k.."="..v.."; "
end
return request_headers_all

Bước 2: tạo một format riêng sử dụng biến “$request_headers” ở trên để ghi thêm thông tin header HTTP vào file log.
– Giả sử mình define log format tên ‘log_header‘ như dưới.

# vi /etc/nginx/nginx.conf
http {
    ## Log format
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for" $request_time' ;

    log_format log_header '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" $request_time | '
                      'req_header: $request_headers' ;
    ...
}

Bước 3: cấu hình 2 phần để vhost cụ thể mà bạn muốn ghi log header kết nối HTTP được thực hiện.

  • access_log : chỉ định tên log format vừa tạo ở trên ‘log_header‘.
  • set_by_lua_file : load file script Lua lên khi xử lý kết nối HTTP tương ứng vhost.
server
{
    listen 443 ssl;
    server_name www.cuongquach.com cuongquach.com ;
    access_log /var/log/nginx/domains/cuongquach.com.log log_header;
    error_log /var/log/nginx/vhost_error.log;

    # Used to log http headers access
    set_by_lua_file $request_headers /etc/nginx/lua/log-headers-http.lua;
    ...
}

Sau đó reload lại Nginx hoặc khởi động lại Nginx Web Server , để apply cấu hình mới.

# nginx -s reload
# systemctl restart nginx

Bước 4: kiểm tra log của vhost vừa cấu hình xem đã apply cấu hình mới chưa. Bạn sẽ thấy nội dung thông tin các trường header của kết nối HTTP mà Nginx xử lý ở sau phần ‘req_header:’

# tail -f /var/log/nginx/domains/cuongquach.com.log
10.0.2.66 - - [25/Apr/2019:11:14:42 +0700] "GET / HTTP/1.1" 200 316 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" "-" 0.001 | req_header: host=cuongquach.com; accept-language=en-US,en;q=0.9; accept-encoding=gzip, deflate, br; connection=keep-alive; accept=text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01; referer=https://cuongquach.com/; x-requested-with=XMLHttpRequest; user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36;

10.0.2.66 - - [25/Apr/2019:11:14:45 +0700] "GET / HTTP/1.1" 200 9257 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" "-" 0.002 | req_header: host=cuongquach.com; accept-language=en-US,en;q=0.9; connection=keep-alive; accept=image/webp,image/apng,image/*,*/*;q=0.8; accept-encoding=gzip, deflate, br; referer=https://cuongquach.com/; user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36;

10.0.2.66 - - [25/Apr/2019:11:14:59 +0700] "GET / HTTP/1.1" 401 1293 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" "-" 0.008 | req_header: accept-language=en-US,en;q=0.9; connection=keep-alive; accept=application/json; referer=https://cuongquach.com/; host=cuongquach.com; accept-encoding=gzip, deflate, br; apikey=fuck; password=; user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36;

Nguồn: https://cuongquach.com/

Previous articleEbook Linux Firewalls (PDF)
Next articleChia sẻ Key Sublime Text 3 – Sublime Text 3 License Key 2019 mới nhất
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !