插件窝 干货文章 Nginx的访问限制与安全设置

Nginx的访问限制与安全设置

Nginx 限制 location header 698    来源:    2025-04-20

Nginx访问限制与安全设置指南

1. 基础访问限制

IP访问控制

# 允许特定IP
allow 192.168.1.1;
allow 10.0.0.0/24;

# 拒绝其他所有
deny all;

# 可以用于location、server或http块

限制HTTP方法

location /admin/ {
    limit_except GET POST {
        deny all;
    }
}

2. 请求频率限制

限制连接速率

# 定义限制区域
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

# 应用限制
location /api/ {
    limit_req zone=one burst=20 nodelay;
}

限制并发连接数

# 定义限制区域
limit_conn_zone $binary_remote_addr zone=addr:10m;

# 应用限制
location /download/ {
    limit_conn addr 5;
}

3. 安全头设置

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'";
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

4. SSL/TLS配置

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

5. 防止常见攻击

防止SQL注入

location ~* "(\'|\")(.*)(drop|insert|md5|select|union)" {
    deny all;
}

防止目录遍历

location ~* (\.\./|\.\.\\) {
    deny all;
}

隐藏Nginx版本信息

server_tokens off;

6. 文件访问限制

# 禁止访问特定文件类型
location ~* \.(htaccess|htpasswd|ini|log|sh|bak)$ {
    deny all;
}

# 禁止访问隐藏文件
location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
}

7. 高级安全配置

限制User-Agent

if ($http_user_agent ~* (wget|curl|httrack|nikto|sqlmap) ) {
    return 403;
}

防止点击劫持

add_header X-Frame-Options "SAMEORIGIN";
# 或完全禁止嵌入
add_header X-Frame-Options "DENY";

设置安全cookie

proxy_cookie_path / "/; HTTPOnly; Secure";

8. 日志与监控

# 记录安全相关日志
log_format security '$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/security.log security;

9. 动态黑名单

# 使用geo模块创建黑名单
geo $blacklist {
    default 0;
    1.2.3.4 1;  # 黑名单IP
    5.6.7.8/24 1;  # 黑名单网段
}

server {
    if ($blacklist) {
        return 403;
    }
    ...
}

10. 定期维护建议

  1. 定期检查Nginx日志中的异常请求
  2. 保持Nginx版本更新
  3. 定期审查SSL/TLS配置,确保使用最新安全协议
  4. 监控服务器性能,防止DDoS攻击
  5. 定期备份配置文件和证书

以上设置可根据实际业务需求进行调整,建议在测试环境验证后再应用到生产环境。