0%

Nginx Log 正規表達式

最近想分析 Nginx 的 Log,最後自己寫了一個 regex,記錄一下。在 IP 部分省麻煩沒有做任何驗證,IPv4 或 IPv6 皆可。

1
(?P<ip>[^\s]+)\s-\s(?P<remote_user>[^\s])\s\[(?P<time_local>[^]]*)\]\s\"(?P<request>(?P<method>[A-Z]{3,7})\s(?<uri>.*)\s(?<http_version>HTTP\/[^"]+))\"\s(?P<status>\d{3})\s(?P<body_bytes_sent>\d+)\s\"(?P<referer>[^\"]*)\"\s\"(?P<http_user_agent>[^\"]+)\"\s\"(?P<http_x_forwarded_for>[^\"]+)\"

這個正規表達式對應的是預設的 Nginx main log 格式:

1
2
3
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
Regex 中包含了對應的 Named capturing-group: - ip: 用戶 IP - remote_user: 使用者名稱 - request: 使用者的 request + method: HTTP 方法 + uri: HTTP request URI + http_version HTTP 版本 - status: HTTP 狀態碼 - body_bytes_sent: 酬載大小 - referer: HTTP Referer - http_user_agent: User-agent - http_x_forwarded_for: Proxy 後的使用者 IP