nginx安全笔记

一、基础信息隐藏(必做)

1. 隐藏版本与服务标识

nginx

复制代码
# nginx.conf http块
server_tokens off;  # 关闭版本号显示
more_set_headers 'Server: Secure-Server';  # 自定义Server头(需headers-more模块)
more_clear_headers "X-Powered-By";  # 移除技术栈标识

2. 禁止敏感文件 / 目录访问

nginx

复制代码
server {
    # 禁止所有隐藏文件(.git/.svn/.env等)
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
    # 禁止敏感后缀文件
    location ~* \.(env|ini|sql|bak|log|conf|sh|py)$ {
        deny all;
    }
    # 防目录遍历
    if ($request_uri ~* \.\./) {
        return 403;
    }
}

二、访问控制与限流(防暴力破解 / CC)

1. 请求频率限制

nginx

复制代码
# nginx.conf http块
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;  # 单IP每秒10请求
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=1r/m;  # 登录接口更严格

server {
    location / {
        limit_req zone=req_limit burst=20 nodelay;  # 突发20请求无延迟
    }
    location /login {
        limit_req zone=login_limit burst=1 nodelay;  # 登录接口限流
    }
}

2. 并发连接限制

nginx

复制代码
# nginx.conf http块
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

server {
    location / {
        limit_conn conn_limit 10;  # 单IP最大10连接
    }
}

3. IP 黑白名单

nginx

复制代码
# 全局黑名单
geo $blocked_ip {
    default 0;
    include /etc/nginx/blocked_ips.conf;  # 外部黑名单文件
}

server {
    if ($blocked_ip) {
        return 444;
    }
    # 目录级白名单
    location /admin {
        allow 192.168.1.0/24;
        deny all;
    }
}

三、HTTP 方法与请求过滤

1. 限制危险 HTTP 方法

nginx

复制代码
server {
    if ($request_method !~ ^(GET|POST|HEAD)$) {
        return 444;  # 仅允许安全方法
    }
}

2. 防 SQL 注入 / 恶意参数

nginx

复制代码
server {
    set $block 0;
    # 拦截SQL注入特征
    if ($request_uri ~* [;'<>\\\(\)]) { set $block 1; }
    if ($args ~* [;'<>\\\(\)]) { set $block 1; }
    if ($block) { return 444; }
}

四、SSL/TLS 安全配置(HTTPS 必做)

nginx

复制代码
server {
    listen 443 ssl http2;
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/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;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    # 开启OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
}

五、安全响应头(浏览器防护)

nginx

复制代码
server {
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    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 Content-Security-Policy "default-src 'self'" always;
}

六、上传目录与脚本执行限制

nginx

复制代码
server {
    location /uploads {
        alias /var/www/uploads;
        # 禁止上传目录执行脚本
        location ~* \.(php|pl|py|jsp|asp|sh|cgi)$ {
            deny all;
        }
    }
}

七、进程权限与系统加固

  • 以非 root 用户运行 Nginx(user nginx;
  • 最小化 Nginx 进程权限,禁止写权限
  • 定期更新 Nginx 与系统补丁
  • 配置日志轮转,审计 403/444 异常请求

八、验证与生效

bash

运行

复制代码
nginx -t  # 检查配置语法
nginx -s reload  # 重载配置
curl -I https://your-domain.com  # 验证响应头
相关推荐
考虑考虑1 小时前
nginx打印请求日志
运维·后端·nginx
策案案案1 小时前
YOLO: 将AI Agents嵌入到IntelliJ IDEA
java·大数据·人工智能·笔记·yolo·microsoft·intellij-idea
asaotomo2 小时前
从抓包插件到浏览器安全 Agent:Hx0 鹰眼 v1.0.6,正式接入 MCP
安全·渗透测试·agent·浏览器插件·ai工具·mcp
啵啵啵鱼4 小时前
DS-顺序表
java·数据结构·笔记·后端·链表·obsidian
xian_wwq5 小时前
【学习笔记】深度认知系列-第13讲AI Agent时代到来——从“回答问题”到“执行任务”
人工智能·笔记·学习
程序猿炎义5 小时前
【llm-algo-leetcode学习笔记】量化优化手段
笔记·学习
xian_wwq5 小时前
【学习笔记】深度认知系列- 第15讲 AI算力战争——GPU、光通信与太空数据中心
笔记·学习
雨田言炎6 小时前
2026/9/5 C复习笔记(一)
c语言·笔记
zhangrelay6 小时前
答疑-是否软件源问题都必须更换为国内呢-
linux·笔记·学习·ubuntu·ros2
zhangrelay6 小时前
《ROS 机器人程序设计》课程教学大纲-2026- kinetic-lyrical
linux·笔记·学习·ubuntu·机器人