🛡️ 安全配置
限流(Rate Limiting)
限流就像景区限流——每秒只能进这么多游客,防止人太多挤爆。
nginx
http {
# 定义限流区域:每个 IP 每秒 10 个请求
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=1r/s;
server {
listen 80;
# API 接口限流
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://127.0.0.1:3000;
}
# 登录接口更严格:每秒 1 个请求
location /api/login {
limit_req zone=login_limit burst=3 nodelay;
proxy_pass http://127.0.0.1:3000;
}
}
}📝 备注: 📝 burst=20 nodelay:允许瞬间突发 20 个请求(队伍长度),nodelay 表示不排队直接处理,超出的直接返回 503。
访问控制
nginx
# 只允许特定 IP 访问管理后台
location /admin/ {
allow 192.168.1.0/24; # 允许内网
allow 10.0.0.1; # 允许特定 IP
deny all; # 拒绝其他所有
proxy_pass http://127.0.0.1:8080/;
}
# HTTP Basic Auth(用户名密码认证)
location /secret/ {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
root /var/www/html;
}bash
# 生成密码文件
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd admin
New password:
Re-type new password:
Adding password for user admin安全响应头
nginx
server {
# 隐藏 Nginx 版本号(不让人知道你的版本,减少攻击面)
server_tokens off;
# 防止点击劫持
add_header X-Frame-Options "SAMEORIGIN" always;
# 防止 MIME 类型嗅探
add_header X-Content-Type-Options "nosniff" always;
# 注意:X-XSS-Protection 已被 Chrome 78+ 弃用,现代安全实践推荐只用 CSP
# add_header X-XSS-Protection "1; mode=block" always;
# 内容安全策略
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';" always;
}