nginx目录浏览与ip黑名单需分设且共存于location块:autoindex on/off控制浏览功能,deny/allow all实现黑名单(须含allow all兜底),二者可同置一location中,但ip规则需配合real_ip_module应对cdn/https场景。

在 nginx.conf 中直接配置目录浏览权限和黑名单列表,需分两部分处理:目录浏览(autoindex)是功能开关,黑名单(IP 限制)是访问控制,二者逻辑独立但可共存于同一 location 块中。关键点在于——不能在 http 块顶层写 allow/deny,也不能把 autoindex 开关放在错误作用域。
一、开启或关闭目录浏览(autoindex)
该功能由 ngx_http_autoindex_module 提供,仅在 location 块中生效,且只对无默认首页(如 index.html)的请求起作用:
- 启用浏览:添加
autoindex on;,可选配autoindex_exact_size off;(显示易读文件大小)、autoindex_format html;(默认)、autoindex_localtime on;(本地时间) - 禁用浏览:写
autoindex off;或直接不写(默认即关闭) - 常见位置示例:
location /files/ {<br> alias /var/www/data/;<br> autoindex on;<br> autoindex_exact_size off;<br>}
二、配置 IP 黑名单(拒绝特定来源)
黑名单必须放在 server 或 location 块内,顺序为「先 deny,后 allow all」;若漏掉 allow all,Nginx 默认放行未匹配请求,导致黑名单失效:
- 单 IP 封禁:
deny 192.168.5.100; - 网段封禁:
deny 203.0.113.0/24; - 兜底放行:
allow all;(必须写在所有deny之后) - 推荐做法:把黑名单抽成外部文件,例如
/etc/nginx/conf.d/blacklist.conf,内容为:deny 192.168.5.100;<br>deny 203.0.113.0/24;<br>allow all;
然后在 location 中引入:include /etc/nginx/conf.d/blacklist.conf;
三、两者结合使用的典型配置
例如,只允许内网访问 /downloads/ 目录并启用浏览,同时屏蔽已知恶意 IP:
- 先明确作用域:必须在某个
server块内的location中配置 - 示例片段:
location /downloads/ {<br> alias /var/www/public/downloads/;<br> autoindex on;<br> autoindex_exact_size off;<br> autoindex_localtime on;<br> # 黑名单<br> deny 198.51.100.25;<br> deny 203.0.113.64/27;<br> allow 192.168.0.0/16;<br> allow 10.0.0.0/8;<br> deny all;<br>} - 注意:
deny all是白名单逻辑的收尾,此处实际是「白+黑混合」——先放行两个内网段,再拒绝其余所有,含黑名单 IP 已被前面deny拦截,不会走到deny all
四、特别注意 HTTPS 和 CDN 场景
如果站点走 HTTPS 或经 CDN(如 Cloudflare),$remote_addr 是代理 IP,直接写 deny 会误封:
- 启用
real_ip_module:在http块中加set_real_ip_from(填 CDN 回源 IP 段),再设real_ip_header X-Forwarded-For; - 之后所有
allow/deny都基于还原后的客户端真实 IP 生效 - 验证方式:临时加
add_header X-Real-IP $remote_addr;查看响应头











