Nginx可通过原生指令实现应用层访问控制:关闭目录浏览(autoindex off)、限制HTTP方法(仅GET/HEAD)、按IP黑白名单控制(allow/deny顺序生效),必要时集成ModSecurity与OWASP CRS增强防护。
Nginx 本身不是网络层防火墙,但它能通过原生指令组合实现面向静态资源的访问控制,效果接近轻量级应用层防火墙。关键不在于装额外模块,而在于用好 location 块内的规则逻辑。
关闭目录浏览,防止资源意外暴露
静态目录若未配置首页(如 index.html),默认可能列出全部文件名,泄露备份文件、配置片段或敏感路径。
在对应 location 中明确禁用:
autoindex off; 只允许合法请求方法
静态资源只需响应 GET 和 HEAD 请求。POST、PUT、DELETE 等方法无业务意义,且常被扫描工具滥用。
添加方法过滤:
if ($request_method !~ ^(GET|HEAD)$) { return 405; } 按 IP 实施黑白名单控制
适用于管理后台静态页、灰度资源、内网接口文档等场景。规则按书写顺序匹配,先写的优先生效。
例如限制仅特定 IP 访问 /admin-assets/:
location /admin-assets/ { allow 192.168.1.100; allow 203.0.113.45; deny all; } deny 198.51.100.0/24; deny all 必须放在最后,否则会提前截断后续 allow 规则。集成 ModSecurity 做深度防护(可选)
当需要防御 SQL 注入、XSS、路径遍历等攻击时,可启用开源 WAF 引擎 ModSecurity。
sudo dnf install nginx-mod-modsecurity modsecurity on; modsecurity_rules_file /etc/nginx/modsecurity.conf; 不复杂但容易忽略