插件窝 干货文章 Nginx安全配置与防护措施,保障网站安全

Nginx安全配置与防护措施,保障网站安全

Nginx 配置 header 安全 980    来源:    2025-04-02

Nginx安全配置与防护措施

基础安全配置

1. 隐藏Nginx版本信息

server_tokens off;

2. 禁用不必要的HTTP方法

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 405;
}

3. 配置安全的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:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

访问控制

4. 限制敏感目录访问

location ~* /(\.git|\.svn|\.env|\.ht) {
    deny all;
    return 403;
}

5. IP访问限制

location /admin {
    allow 192.168.1.0/24;
    allow 10.0.0.1;
    deny all;
}

6. 速率限制

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
    location / {
        limit_req zone=one burst=20 nodelay;
    }
}

内容安全策略

7. 设置安全头

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'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.example.com; img-src 'self' data: https://*.example.com";
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

文件上传安全

8. 限制上传文件类型和大小

client_max_body_size 10M;

location /upload {
    # 仅允许图片上传
    if ($request_filename ~* ^.*?\.(php|jsp|sh|exe)$) {
        return 403;
    }
}

防注入攻击

9. SQL注入防护

set $block_sql_injections 0;
if ($query_string ~ "union.*select.*\(") {
    set $block_sql_injections 1;
}
if ($block_sql_injections = 1) {
    return 403;
}

10. XSS防护

set $block_xss 0;
if ($query_string ~ "<script.*>") {
    set $block_xss 1;
}
if ($block_xss = 1) {
    return 403;
}

日志与监控

11. 详细日志记录

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;

12. 错误日志配置

error_log /var/log/nginx/error.log warn;

高级防护措施

13. 使用ModSecurity WAF

load_module modules/ngx_http_modsecurity_module.so;

http {
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsec/main.conf;
}

14. 防止目录遍历

location ~* \.(?:php|pl|cgi|sh|bash|git|svn|env|htaccess|htpasswd|ini|log|sql)$ {
    deny all;
    return 403;
}

15. 防止点击劫持

add_header X-Frame-Options "SAMEORIGIN";
add_header Content-Security-Policy "frame-ancestors 'self'";

最佳实践建议

  1. 定期更新Nginx:保持Nginx版本为最新稳定版
  2. 最小化模块:仅加载必要的Nginx模块
  3. 文件权限:确保Nginx运行用户对文件有最小必要权限
  4. 定期审计:检查配置文件和日志中的异常
  5. 备份配置:修改配置前做好备份
  6. 使用fail2ban:自动封禁恶意IP
  7. 禁用SSI:除非必要,否则禁用服务器端包含 nginx ssi off;

通过实施这些安全配置和防护措施,可以显著提高Nginx服务器的安全性,减少潜在的攻击面。