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

Laravel生产环境下Storage目录图片无法访问问题求助

Laravel生产环境图片存储软链接无法访问问题排查与解决

1. 验证软链接指向正确性

首先确认public/storage软链接是否正确指向storage/app/public:

  • 在项目根目录执行:ls -l public/storage
  • 正确输出应为:public/storage -> ../storage/app/public
  • 如果指向错误或链接不存在:
    1. 删除旧链接:rm public/storage
    2. 以web服务器运行用户(如www-data)身份重新创建链接:
      sudo -u www-data php artisan storage:link
      
    (直接用root创建的链接可能因权限继承问题无法被web服务访问)

2. 核对文件存储路径与访问路径

  • 你的代码中storeAs('public/images', $fileName)会将文件存在storage/app/public/images/xxx.png,对应访问URL应为https://mysite/storage/images/xxx.png,这个逻辑是正确的。
  • 检查数据库中存储的文件名是否仅为纯文件名(如1695812089.png),不要包含storage/images/这类前缀。

3. 检查Web服务器配置

Nginx配置要点

确保服务器根目录指向项目的public文件夹,而非项目根目录,示例配置:

server {
    listen 443 ssl;
    server_name mysite.com;
    root /var/www/your-project/public; # 重点:指向public目录

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

配置修改后重启Nginx:sudo systemctl restart nginx

Apache配置要点

  • 确保mod_rewrite模块已启用:sudo a2enmod rewrite
  • 在服务器配置中给项目public目录设置AllowOverride All:
    <Directory /var/www/your-project/public>
        AllowOverride All
    </Directory>
    
  • 确认public/.htaccess文件存在且未被修改,默认Laravel的.htaccess会处理路由重写。

4. 修复目录权限(避免用777)

不要用chmod 777这种不安全的权限,正确设置如下:

# 给web服务器用户赋予目录所有权
sudo chown -R www-data:www-data storage bootstrap/cache
# 设置基础读写权限
sudo chmod -R 755 storage bootstrap/cache
# 给公共存储目录添加写入权限(用于上传)
sudo chmod -R 775 storage/app/public

5. 核对文件系统配置

检查config/filesystems.php中的public磁盘配置:

'public' => [
    'driver' => 'local',
    'root' => storage_path('app/public'),
    'url' => env('APP_URL').'/storage',
    'visibility' => 'public',
],
  • Laravel 9及以上版本,.env中设置FILESYSTEM_DISK=public
  • 旧版本设置FILESYSTEM_DRIVER=public

修改配置后清理缓存:

php artisan config:clear
php artisan cache:clear

6. 验证文件可被Web服务器读取

以web服务器用户身份尝试读取目标图片,确认权限无问题:

sudo -u www-data cat storage/app/public/images/1695812089.png

如果能正常输出文件内容,说明文件本身权限没问题;如果报错,检查文件是否真的存在,或权限是否正确。


内容的提问来源于stack exchange,提问作者Jakeb S K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:27:36