Serve index.html file if exists try_files + proxy_pass?

Francis Daly francis at daoine.org
Mon May 1 12:08:11 UTC 2017


On Mon, May 01, 2017 at 01:50:10PM +0200, Lucas Rolff wrote:

Hi there,

Thanks for the extra explanation. It is clear to me now.

> When I access https://minio.box.com/<bucket>/ Minio will generate an
> XML containin a list of objects within a specific bucket (as per S3
> API standards).
> 
> Example: https://gist.github.com/lucasRolff/7a0afb95103f6c93d8bc448f5c1c35f4
> 
> Since I do not want to expose this bucket object list, I want to do
> so if a bucket has the file "index.html" that it will serve this,
> instead of showing the bucket object list.

Ok.

For info: that *will* expose the bucket object list if there is no
index.html.

You may prefer a static fallback page, or an error indication instead.

> If I access https://minio.box.com/images/ - it should look for the
> file /home/minio/images/index.html and serve if existing else load
> the bucket object list (basically, just proxy_pass as normal).
> 
> Any other request I do such as
> https://minio.box.com/images/nginx-rocks.png should go to my
> upstream server (localhost:9000)

> If I do try_files index.html @upstream;
> 
> Then try_files will base it on the root directive defined, in this
> case it would try look for /home/minio/index.html if I set the root
> directive to "/home/minio", correct?

Correct.

> I guess I could take try_files "${uri}index.html" @upstream; which
> would produce something like /home/minio/storage/index.html if you
> have /storage/ as the URI, but if URI is /storage/image1.png it
> would try to look for "/home/minio/storage/image1.pngindex.html" and
> for me that doesn't seem very efficient, since it would have to stat
> for a file on the file system for every request before actually
> going to my upstream.

Also correct.

> I could maybe do:
> 
> location / {
>   location ~ /$ {
>     try_files "${uri}index.html" @upstream;
> 
>   }
> 
>   // continue normal code here
> }
> 
> location @upstream {
>   proxy_pass http://127.0.0.1:9000;
> }

That is what I would suggest. Where "// continue normal code here" is
"proxy_pass http://127.0.0.1:9000;". And "root /home/minio;" is set
somewhere so that it applies where try_files is.

Good luck with it,

	f
-- 
Francis Daly        francis at daoine.org


More information about the nginx mailing list