利用 Nginx 日志提升网站安全的实操方案
一 日志采集与规范化
log_format json_analytics escape=json '{'
"\"msec\":\"$msec\","
"\"remote_addr\":\"$remote_addr\","
"\"request\":\"$request\","
"\"status\":\"$status\","
"\"http_user_agent\":\"$http_user_agent\","
"\"http_referer\":\"$http_referer\","
"\"request_time\":\"$request_time\","
"\"body_bytes_sent\":\"$body_bytes_sent\"'
'}';
access_log /var/log/nginx/access.log json_analytics;
error_log /var/log/nginx/error.log warn;
说明:JSON 格式便于 ELK、Loki 等系统解析;确保错误日志级别合理(如 warn/error)以保留关键线索。二 实时监控与告警
tail -f /var/log/nginx/access.logawk '{print $9}' access.log | sort | uniq -c | sort -nr | headgrep -E ' 4[0-9]{2} | 5[0-9]{2} ' access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head三 威胁检测与处置规则
if ($http_user_agent ~* "(scrapy|curl|java|python-urllib|bot)") { return 403; }
说明:该策略应与业务白名单、合法爬虫策略协同,避免误伤。limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 100;
limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
limit_req zone=req burst=20 nodelay;
说明:阈值需结合业务峰值与基线动态调整,避免影响正常用户。location /admin/ {
allow 192.168.1.0/24;
deny all;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
说明:白名单与认证策略应与日志告警联动,确保异常访问可被快速发现与处置。四 日志安全与合规
五 可落地的 30 分钟实施清单