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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:12:35