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  # 验证响应头
相关推荐
2501_926978339 小时前
AGI 的四种瓶颈:资源型还是发现型--以及DSH的位置
人工智能·经验分享·笔记·ai写作
liuqs33210 小时前
nat123安卓和nat123全端口选型指南,映射工具怎么挑
网络·笔记
xian_wwq10 小时前
【学习笔记】光伏“四可”装置纵密模块--配置方法和原理
笔记·学习
g105655913912 小时前
LAMP博客平台Wordpress实战
android·mysql·nginx·php
一次旅行12 小时前
2026.08.16 AI产业深度解读|国产大模型全面突围,算力硬件/智能安全/人形机器人四大趋势附落地方案
人工智能·安全·机器人
日拱一卒的小田13 小时前
ZYNQ学习笔记3-ZYNQ的IIC控制器1
笔记·单片机·学习
名字还没想好☜14 小时前
Next.js 用 Server Components 直连数据库:去掉 API 层的边界,和三条别踩的安全红线
前端·javascript·数据库·安全·react·next.js
不会代码的小猴15 小时前
C++新增关键字
开发语言·c++·笔记
liulilittle16 小时前
并发与内存安全术语:定义、分类与关联
c++·安全·并发·术语
CDN36016 小时前
流媒体加速实践:出海东南亚短视频点播频繁缓冲,HLS 分片与 Nginx 配置调优
java·网络·nginx·流媒体加速