Nginx日志安全分析实操指南
一 基础准备与日志规范
log_format json_analytics escape=json '{
"msec": "$msec",
"remote_addr": "$remote_addr",
"http_x_forwarded_for": "$http_x_forwarded_for",
"request": "$request",
"status": "$status",
"body_bytes_sent": "$body_bytes_sent",
"http_referer": "$http_referer",
"http_user_agent": "$http_user_agent"
}';
access_log /var/log/nginx/access.log json_analytics;
error_log /var/log/nginx/error.log;
日志轮转与归档:使用logrotate或定时任务按日/周切分,压缩归档并设置保留周期,避免磁盘被占满影响服务与取证。二 关键安全场景与检测规则
union select、sleep(、' or 1=1)、XSS(<script>、onerror=)、文件包含(php://filter、../)、命令注入(;、|、$()等。三 快速上手命令与可视化
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | headawk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nrgrep ' 404 ' /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr | headgrep -i "sqlmap\|nmap\|burp\|scanner" /var/log/nginx/access.log | awk '{print $1,$7,$12}' | sort | uniq -c | sort -nr | headgrep -E 'POST /(login|admin).* 401|403' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | headtail -f /var/log/nginx/access.log | grep --line-buffered ' 404\| 500'goaccess /var/log/nginx/access.log -o /var/www/report.html --log-format=COMBINED --real-time-html四 自动化与防护联动
/etc/fail2ban/jail.local中启用对应 jail 并重启服务。五 处置流程与持续优化