最近想分析 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 格式: Regex 中包含了對應的 Named capturing-group: - 1
2
3log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';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