Docker部署Laravel时Storage文件404问题求助(Nginx环境)
Laravel 图片上传404问题排查与解决
问题描述
使用Docker+Nginx部署Laravel网站,已执行php artisan storage:link命令,设置目录权限chmod -R 775、用户组chown -R www:data,且.env配置FILESYSTEM_DISK=public,但上传的图片无法显示,出现404错误。Nginx配置如下:
server { listen 443 ssl; server_name pmb.arogapopin.ac.id; root /var/www/pmb.arogapopin.ac.id/public; ssl_certificate /var/www/ssl-certificate/arogapopin.ac.id.pem; ssl_certificate_key /var/www/ssl-certificate/arogapopin.ac.id.key; error_log /var/log/nginx/error.log; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~* \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/html/pmb.arogapopin.ac.id/public/$fastcgi_script_name; fastcgi_pass 127.0.0.1:8201; } location ~ /\.ht { deny all; } } server { if ($host = pmb.arogapopin.ac.id) { return 301 https://$host$request_uri; } # managed by Certbot server_name pmb.arogapopin.ac.id; listen 80; return 404; }
排查与解决步骤
1. 修复Nginx的SCRIPT_FILENAME路径错误
你的Nginx配置中,root指定路径为/var/www/pmb.arogapopin.ac.id/public,但fastcgi_param SCRIPT_FILENAME错误使用了/var/www/html/...路径,多了html目录,导致PHP解析路径异常,直接影响Laravel对storage链接的处理。
修改这一行:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
或者直接修正为对应路径:
fastcgi_param SCRIPT_FILENAME /var/www/pmb.arogapopin.ac.id/public/$fastcgi_script_name;
修改后重启Nginx:
nginx -s reload
2. 验证storage软链接有效性
进入Laravel项目的public目录,检查storage软链接是否指向正确的../storage/app/public目录:
cd /var/www/pmb.arogapopin.ac.id/public ls -l storage
如果链接不存在或指向错误,重新执行链接命令(注意:需在Docker容器内部执行此命令,确保链接创建在容器内的正确路径):
php artisan storage:link
3. 确认目录权限与用户组匹配
- 检查
storage/app/public目录权限,确保Nginx运行用户(通常为www或www-data)拥有读写权限:
chmod -R 775 /var/www/pmb.arogapopin.ac.id/storage/app/public chown -R www:data /var/www/pmb.arogapopin.ac.id/storage
如果Nginx用户不属于data组,需执行usermod -aG data www将用户加入组。
- Docker环境下,需确保容器内用户权限与宿主机同步,或在Dockerfile中设置正确的用户组映射规则。
4. 检查.env配置正确性
确认.env中的核心配置无误:
FILESYSTEM_DISK=public APP_URL=https://pmb.arogapopin.ac.id
APP_URL必须为网站实际域名,Laravel生成图片访问链接时依赖此配置。
5. 查看Nginx错误日志定位问题
若以上步骤未解决问题,查看Nginx错误日志获取具体报错信息:
cat /var/log/nginx/error.log
日志会显示404对应的具体路径,可快速判断是链接失效、权限不足还是路径配置错误。
内容的提问来源于stack exchange,提问作者Ahmad Tirta
相关产品推荐
相关产品推荐

