一、故障日志还原
2026/06/18 07:24:33 [error] 28#28: *18 directory index of "/usr/share/nginx/html/dist/" is forbidden, client: 192.168.140.1, server: localhost, request: "GET / HTTP/1.1", host: "192.168.140.129:8090"
二、报错核心原因
该报错是Nginx部署Vue/React等前端SPA项目高频报错,本质两大问题:
- 无默认首页:站点根目录
/usr/share/nginx/html/dist/缺失index.html,Nginx默认禁止目录文件浏览,直接拦截访问; - 权限/配置异常:目录读写权限不足、Nginx未配置首页、SPA路由缺失兜底规则、CentOS SELinux安全拦截。
生产环境严禁开启目录浏览,优先修复首页、权限、路由配置,不推荐临时开启目录索引。
三、分步修复方案(按优先级执行)
步骤1:校验前端打包文件完整性
进入dist目录,核查是否存在打包首页index.html
# 查看目录文件
ls /usr/share/nginx/html/dist/
- 无index.html:本地重新执行
npm run build打包,上传完整dist文件夹至服务器对应目录; - 有index.html:直接跳转修改Nginx配置。
步骤2:修改Nginx站点配置(根治90%问题)
编辑端口8090对应的站点配置,一般路径:/etc/nginx/conf.d/default.conf
✅ SPA项目完整可用配置(直接复制替换)
server {
listen 8090;
server_name localhost;
# 指定前端打包根目录
root /usr/share/nginx/html/dist;
# 配置默认访问首页
index index.html index.htm;
location / {
# 前端history路由兜底,刷新404必加配置
try_files $uri $uri/ /index.html;
}
}
配置校验+重载生效命令:
# 校验配置语法是否有误
nginx -t
# 平滑重载配置,不中断业务
nginx -s reload
步骤3:修复目录文件权限(Linux服务器高频诱因)
Nginx运行用户无dist目录读取权限,依旧会触发目录禁止访问,一键授权命令:
# 1. 修改目录归属为nginx运行用户
chown -R nginx:nginx /usr/share/nginx/html
# 2. 目录授予755权限,文件授予644标准安全权限
chmod -R 755 /usr/share/nginx/html
find /usr/share/nginx/html -type f -exec chmod 644 {} \;
补充:部分系统Nginx用户为www-data,替换命令用户即可:chown -R www-data:www-data /usr/share/nginx/html
步骤4:CentOS专属:关闭SELinux拦截
CentOS/RHEL默认开启SELinux,会拦截Nginx读取网页目录,一键永久放行:
# 临时放行目录
chcon -R -t httpd_sys_content_t /usr/share/nginx/html
# 永久放行,服务器重启失效
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html(/.*)?"
restorecon -R /usr/share/nginx/html
步骤5:仅本地测试:临时开启目录浏览(生产禁用)
仅本地调试查看文件使用,线上业务绝对不要开启,会泄露站点目录结构:
location / {
root /usr/share/nginx/html/dist;
index index.html;
autoindex on; # 开启目录文件浏览
}
四、标准化排查顺序(新手直接照搬)
- 检查dist目录是否存在index.html → 缺失重新打包
- Nginx配置添加index首页 + try_files路由兜底
- 修正html目录归属与读写权限
- CentOS服务器处理SELinux安全拦截
- 重载Nginx配置,刷新访问测试
五、避坑总结
- Vue/React history路由,必须加try_files兜底配置,否则刷新页面404+目录报错;
- 不要用777权限粗暴授权站点目录,安全风险极高;
- autoindex目录浏览功能,仅限内网测试,外网生产永久关闭。
正文完
可以使用微信扫码关注公众号(ID:xzluomor)