@nite It’s really not performant to tie up PHP processes to serve images. If you have a web page that has say, 10 images on it, then that’s going to require 11 PHP threads to render the page, because each image request is going to invoke a HTTP request, boot up the Laravel framework, create database connections, etc.
If you’re storing images as private objects in an S3 bucket then consider using signed URLs. Your application should generate the URLs if the user is authorised to view the requested object, but then the actual serving of the object will still be handled by S3.