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

Laravel部署至Nginx服务器后无法访问存储目录中的图片

解决Laravel线上Nginx服务器图片无法访问的问题

看起来你遇到的问题很典型——本地跑的好好的,一部署到Nginx就掉链子😅。咱们一步步来排查:

1. 先确认软链接是否真的有效

你说执行php artisan storage:link提示目录已存在,但这时候要警惕:这个"public/storage"可能是个真实的目录,而不是软链接。

  • 先删掉这个目录:
    rm -rf public/storage
    
  • 然后重新创建软链接,建议用绝对路径创建(避免权限或路径解析问题):
    php artisan storage:link --force
    # 或者手动创建绝对路径软链接,假设你的Laravel项目根目录是/var/www/laravel
    ln -s /var/www/laravel/storage/app/public /var/www/laravel/public/storage
    
  • 创建后,用ls -l public/storage查看,输出应该类似这样(明确显示指向storage/app/public):
    lrwxrwxrwx 1 www-data www-data 32 Oct 10 12:00 public/storage -> /var/www/laravel/storage/app/public
    

2. 检查Nginx配置是否正确

Nginx的root必须指向Laravel项目的public目录,否则静态文件会找不到。打开你的Nginx站点配置文件(通常在/etc/nginx/sites-available/下),确认核心配置:

server {
    listen 80;
    server_name your_domain_or_ip;
    root /var/www/laravel/public; # 这里必须是public目录!

    index index.php index.html index.htm;

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

    # 让Nginx直接处理静态文件,提高效率同时避免PHP解析问题
    location ~* \.(jpg|jpeg|png|gif|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 根据你的PHP版本调整路径
    }
}

修改后重启Nginx:sudo systemctl restart nginx

3. 验证文件权限

线上服务器的文件权限是重灾区:

  • 确保storage目录和public/storage软链接的所有者是web服务器用户(通常是www-data):
    sudo chown -R www-data:www-data /var/www/laravel/storage
    sudo chown -R www-data:www-data /var/www/laravel/public/storage
    
  • 目录权限设为755,文件权限设为644:
    find /var/www/laravel/storage -type d -exec chmod 755 {} \;
    find /var/www/laravel/storage -type f -exec chmod 644 {} \;
    

4. 优化图片URL生成(可选但推荐)

你现在用的url('/storage/images/'.$file->file_name)可以换成Laravel的asset()辅助函数,它会自动根据.env里的APP_URL生成正确路径,避免手动拼接的潜在问题:

<a href="{{ asset('storage/images/'.$file->file_name) }}" title="">View</a>

记得在.env里设置正确的APP_URL,比如APP_URL=http://your_ip_or_domain

做完这些步骤后,再试试访问图片,应该就能正常显示了。如果还是不行,打开浏览器开发者工具看一下网络请求的状态码(404、403之类的),能帮你更快定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:04:07