关闭目录浏览需全局设autoindex off并清除各location中autoindex on;隐藏版本号须在http块内配置server_tokens off,禁用错误页硬编码版本,并验证响应头及错误页源码无泄露。

关闭 Nginx 的目录浏览和版本号显示,是中间件安全加固中最基础、最有效的两项操作。它们不改变功能,却能显著降低被自动化扫描识别和针对性攻击的风险。
一、彻底关闭目录浏览(禁用 autoindex)
目录浏览(autoindex)一旦开启,攻击者可直接列出网站目录结构,暴露敏感路径、备份文件、配置片段等。必须全局禁用,并在关键 location 中二次确认。
- 在 http 块顶层 添加:
autoindex off;—— 这是全局默认值,覆盖所有 server 和 location - 检查所有
server或location块,删除任何autoindex on;行(常见于静态资源或下载目录配置中) - 对存放上传文件、附件、日志等的目录,额外加一层防护:
location ~ ^/(uploads|attachments|logs)/ {<br> deny all;<br>}
二、完全隐藏 Nginx 版本号(响应头 + 错误页)
server_tokens off; 是核心指令,但必须写对位置、配好上下文,否则无效。
- 只在 http { } 块内 设置才生效(不能写在 server 或 location 里)
- 在
/etc/nginx/nginx.conf(或宝塔的/www/server/nginx/conf/nginx.conf)中找到http {开头处,在其内部、与include mime.types;同级位置添加:server_tokens off; - 删掉站点配置文件(如
/etc/nginx/conf.d/your-site.conf)中重复出现的server_tokens行,避免冲突 - 自定义错误页(如
error_page 404 /404.html;)中,确保 HTML 源码不包含nginx/、1.24.0等字样
三、验证是否真正生效
改完不验证 = 白改。两个地方缺一不可:
-
查响应头:运行
curl -I https://your-domain.com,确认Server:字段只显示nginx或已完全不出现 -
看错误页源码:访问一个不存在的路径(如
/nonexistent),右键“查看网页源代码”,搜索nginx、1.、Ubuntu等关键词,确保无任何版本或系统痕迹
四、顺手堵住其他常见泄露点
仅关 Nginx 版本远远不够,真实环境中还有多个“信息出口”:
-
PHP:编辑
/etc/php/*/fpm/php.ini,设expose_php = Off,消除X-Powered-By头 -
反向代理上游:若后端是 Tomcat、Node.js 等,在对应
location块中加proxy_hide_header Server; -
隐藏文件与备份:在 http 或 server 块中添加:
location ~ /\.(htaccess|htpasswd|env|log|ini|bak|swp|git|svn) { deny all; }


















