requests per second
(req/s)active connections
(活跃/等待连接)request_time
和 upstream_response_time
bytes_sent/received
(入站/出站流量)accept() failed
、connect()
失败等location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
log_format json_analytics escape=json
'{"timestamp":"$time_iso8601",'
'"remote_addr":"$remote_addr",'
'"status":"$status",'
'"request_time":$request_time,'
'"upstream_response_time":"$upstream_response_time",'
'"request":"$request",'
'"http_referrer":"$http_referer",'
'"http_user_agent":"$http_user_agent"}';
# 检测异常请求速率
tail -f access.log | awk '{print $1}' | sort | uniq -c | sort -nr
# 查找可疑请求
grep -E 'select|union|eval\(|base64_decode' access.log
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
action = iptables[name=HTTP, port=http, protocol=tcp]
logpath = /var/log/nginx/error.log
maxretry = 3
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
location / {
limit_req zone=one burst=20 nodelay;
}
limit_conn_zone $binary_remote_addr zone=addr:10m;
location /download/ {
limit_conn addr 5;
}
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
groups:
- name: nginx-alerts
rules:
- alert: HighRequestLatency
expr: histogram_quantile(0.99, sum(rate(nginx_http_request_time_seconds_bucket[1m])) by (host) > 3
for: 5m
labels:
severity: critical
annotations:
summary: "High request latency on {{ $labels.host }}"
#!/bin/bash
# 自动封禁异常IP
ABNORMAL_IPS=$(awk '$4 >= 400 {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10 | awk '{print $2}')
for ip in $ABNORMAL_IPS; do
iptables -A INPUT -s $ip -j DROP
echo "$(date) - Blocked IP: $ip" >> /var/log/nginx/ip_block.log
done
通过以上综合方案,可以实现对Nginx服务全方位的安全性能监控与异常检测,及时发现并应对潜在威胁。