首页 > 解决方案 > Laravel + Heroku:在 Heroku 中访问图像返回 403(禁止)

问题描述

我在 Heroku 中部署了我的 Laravel 应用程序,很高兴它运行良好,但该应用程序无法访问/storage/app/public/uploads/. 我还运行了一个文件夹到目录php artisan storage:link的符号链接,导致创建./storage//public//public/storage/uploads/

Heroku 日志

这是heroku中的日志部分。

2-11-06T01:47:03.064600+00:00 app[web.1]: 10.101.243.98 - - [06/Nov/2018:01:47:03 +0000] "GET /storage/uploads/mobile-cabinet.jpg HTTP/1.1" 403 243 "http://somename.herokuapp.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36

2018-11-06T01:47:03.225408+00:00 app[web.1]: [Tue Nov 06 01:47:03.224875 2018] [core:error] [pid 97:tid 139829891245824] [client 10.65.51.99:29323] AH00037: Symbolic link not allowed or link target not accessible: /app/public/storage, referer: http://somename.herokuapp.com/

问题

标签: laravelheroku

解决方案


Heroku dyno 上的文件系统是短暂的。因此,如果您手动创建符号链接,它将在重新启动测功机或下次部署时被销毁。此外,如果您正在运行类似的命令,heroku php artisan storage:link则该命令正在与您的网络测功机不同的上下文中执行。一旦该命令完成运行,该符号链接将被销毁。

例如,heroku run "php artisan storage:link; ls -la public"做你所期望的:

heroku run "php artisan storage:link; ls -la public"
Running php artisan storage:link; ls -la public on ⬢ glacial-ocean-62163... up, run.9596 (Free)
The [public/storage] directory has been linked.
total 28
drwx------  4 u28609 dyno 4096 Feb 27 19:39 .
drwx------ 14 u28609 dyno 4096 Feb 27 19:39 ..
-rw-------  1 u28609 dyno  593 Feb 27 19:32 .htaccess
drwx------  2 u28609 dyno 4096 Feb 27 19:32 css
-rw-------  1 u28609 dyno    0 Feb 27 19:32 favicon.ico
-rw-------  1 u28609 dyno 1823 Feb 27 19:32 index.php
drwx------  2 u28609 dyno 4096 Feb 27 19:32 js
-rw-------  1 u28609 dyno   24 Feb 27 19:32 robots.txt
lrwxrwxrwx  1 u28609 dyno   23 Feb 27 19:39 storage -> /app/storage/app/public

但是,如果您再次运行heroku run ls -la public,该符号链接就消失了:

Running ls -la public on ⬢ glacial-ocean-62163... up, run.7351 (Free)
total 28
drwx------  4 u54238 dyno 4096 Feb 27 19:32 .
drwx------ 14 u54238 dyno 4096 Feb 27 19:40 ..
-rw-------  1 u54238 dyno  593 Feb 27 19:32 .htaccess
drwx------  2 u54238 dyno 4096 Feb 27 19:32 css
-rw-------  1 u54238 dyno    0 Feb 27 19:32 favicon.ico
-rw-------  1 u54238 dyno 1823 Feb 27 19:32 index.php
drwx------  2 u54238 dyno 4096 Feb 27 19:32 js
-rw-------  1 u54238 dyno   24 Feb 27 19:32 robots.txt

事实上,它从未存在于您的网络测功机上。

了解文件系统是短暂的也应该让您重新考虑使用存储文件夹进行用户上传。当您的测功机重新启动时,这些上传也将丢失。相反,将用户上传的内容存储在 Amazon S3 或其他形式的异地存储中。这将允许您随意扩展或破坏您的测功机,而不会冒用户数据的风险。Heroku 文档中有关此的更多信息。


推荐阅读