Laravel+Heroku:访问Heroku中的图像返回403(禁止)



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

  • Heroku中有图像文件(使用heroku run bashls -la storage/app/public/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/

问题

  • Laravel应用程序如何访问它以显示到web应用程序

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

例如,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

事实上,它从未存在于你的网络dyno上。

了解文件系统是短暂的,也应该促使您重新考虑使用存储文件夹进行用户上传。当你的dyno重新启动时,这些上传也会丢失。相反,将用户上传的内容存储在AmazonS3或其他形式的非现场存储中。这将允许您在不冒用户数据风险的情况下随意扩展或销毁dynos。有关这方面的更多信息,请参阅Heroku文档。

最新更新