Nginx 安全防护配置清单
一 基础加固
二 访问控制与请求限制
三 传输加密与协议安全
四 安全响应头与内容防护
五 快速可用的示例片段
# 1) 基础安全与错误页面
http {
server_tokens off;
autoindex off;
ssi off;
port_in_redirect off;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
# 2) 频率与并发限制
limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;
# 3) 黑名单示例(可单独文件引入)
include /etc/nginx/blacklist_ip.conf;
server {
listen 80 default_server;
server_name _;
return 403;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers on;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
# 安全响应头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 仅允许域名访问(已在默认 server 拦截)
# 管理后台 IP 白名单
location /admin {
allow 192.168.1.0/24;
allow 203.0.113.10;
deny all;
# proxy_pass http://backend_admin;
}
# 限制方法
if ($request_method !~ ^(GET|POST|HEAD)$) {
return 405;
}
# 频率限制(突发 5,超阈值立即拒绝)
location / {
limit_req zone=req burst=5 nodelay;
limit_conn conn 20;
# proxy_pass http://backend;
}
# 恶意参数拦截
set $block 0;
if ($args ~* "(union|select|insert|update|delete|drop|truncate|or|and|exec)") { set $block 1; }
if ($request_uri ~* "<script>|<iframe>|javascript:|on\w+=") { set $block 1; }
if ($request_uri ~* "\.\./|\.\.|/etc/passwd|/proc/self/environ") { set $block 1; }
if ($http_user_agent ~* "(sqlmap|nmap|burp|scanner|crawler|bot)") { set $block 1; }
if ($block = 1) { return 403; }
# 自定义错误页
error_page 404 /404.html;
location = /404.html { root /usr/share/nginx/html; internal; }
}
}
六 运维与验证