You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DigitalOcean LEMP部署Laravel后public目录静态资源返回403禁止访问

问题根因定位

从你提供的Nginx错误日志access forbidden by rule可以直接判定:该403错误不是文件系统权限问题,是Nginx服务端配置规则主动拦截了静态资源的访问请求,你给出的目录/文件权限(属主为www-data、具备读/目录执行权限)完全符合Laravel运行要求,无需调整。

常见触发原因
  • Nginx站点配置的root参数指向错误,未直接指向Laravel项目的public目录,触发了Nginx默认的非web根目录访问限制
  • 配置中存在误写的静态资源拦截规则,比如针对.css/.js/.png/.jpg等后缀的请求设置了deny all规则
  • 静态资源匹配优先级高于Laravel默认的try_files规则,且规则逻辑错误导致请求被拦截
  • 额外安装的WAF(如mod_security)、防盗链规则误拦截了本地正常的静态资源请求

解决方案

步骤1:修改Nginx站点配置

配置文件默认路径为/etc/nginx/sites-available/你的站点配置名.conf,调整为符合Laravel要求的标准配置:

  1. 确认root参数直接指向项目public目录:
root /path/to/your/laravelproject/public; # 替换为你实际的public目录路径
index index.php index.html index.htm;
  1. 检查并删除所有针对静态资源后缀的拦截规则,保留默认的try_files规则即可:
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
  1. 若安装了mod_security等安全组件,可临时关闭后测试是否恢复访问。

步骤2:生效配置

先测试配置合法性,避免配置错误导致Nginx崩溃:

sudo nginx -t

返回test is successful后重载Nginx生效:

sudo systemctl reload nginx

步骤3:验证访问

清空浏览器缓存后重新访问页面,或直接用curl本地测试静态资源返回:

curl -I http://你的站点域名/css/你的测试css文件.css

返回200状态码即代表修复成功。

可选优化(非必要)

你public下的img目录设置了SUID/SGID位(权限显示为drwsr-sr-x),无安全风险也不影响访问,如需调整为标准权限可执行:

chmod -R 755 /path/to/your/laravelproject/public/img

内容的提问来源于stack exchange,提问作者Fateh Alrabeai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:24:05