Docker环境下Laravel资源访问403权限拒绝问题求助
解决Laravel资源403访问拒绝问题(Docker+DNMP+Nginx Proxy Manager)
1. 检查Laravel项目文件权限
Laravel的public目录及静态资源权限错误是最常见的403诱因:
- 宿主机上直接调整权限:
# 给存储目录开放写入权限 chmod -R 775 storage bootstrap/cache # 匹配容器内PHP运行用户(通常为www-data) chown -R www-data:www-data your-project-root - 进入DNMP的PHP容器内操作:
docker exec -it your-php-container bash chmod -R 775 storage bootstrap/cache chown -R www-data:www-data /var/www/html
2. 修正Nginx Proxy Manager转发配置
NPM必须精准指向Laravel的public目录,而非项目根目录:
- 登录NPM后台,找到对应站点的代理配置
Forward Hostname / IP填写DNMP中PHP容器的服务名(如php)或容器IP(需确保两容器在同一Docker网络)Forward Port填写PHP-FPM端口,通常为9000- 切换到
Advanced标签,添加自定义Nginx规则处理静态资源:location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ { root /var/www/html/public; # 对应PHP容器内Laravel的public目录路径 expires 1y; add_header Cache-Control "public, immutable"; try_files $uri $uri/ =404; } location / { try_files $uri $uri/ /index.php?$query_string; fastcgi_pass php:9000; # 与DNMP中PHP容器的服务名保持一致 fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
3. 确保Docker网络互通
DNMP容器和NPM必须在同一Docker网络,否则NPM无法访问PHP容器:
- 查看DNMP的
docker-compose.yml网络配置,比如是否有自定义网络:networks: default: external: name: dnmp-shared-network - 修改NPM的
docker-compose.yml,加入同一网络:networks: default: external: name: dnmp-shared-network - 重启NPM容器生效:
docker-compose down && docker-compose up -d
4. 校验Laravel环境配置
确保.env文件的APP_URL与访问域名一致:
APP_URL=https://your-domain.com
然后清除Laravel缓存:
docker exec -it your-php-container php artisan config:clear docker exec -it your-php-container php artisan cache:clear
5. 确认静态资源路径正确性
页面中需使用Laravel内置函数生成资源路径,避免相对路径解析错误:
<link rel="stylesheet" href="{{ asset('css/app.css') }}"> <script src="{{ mix('js/app.js') }}"></script>
内容的提问来源于stack exchange,提问作者BaoYuan
相关产品推荐
相关产品推荐

