I posted a possible solution to this problem on serverfault; reproduced here for convenience:
If I understand the question correctly, you want to automatically serve, without using a 301 redirect, http://example.com/foo/index.html when the request is for http://example.com/foo with no trailing slash?
Basic solution that works for me
If so I’ve found this try_files configuration to work:
try_files $uri $uri/index.html $uri/ =404;
- The first
$urimatches the uri exactly- The second
$uri/index.htmlmatches a directory containing the index.html where the last element of the path matches the directory
name, with no trailing slash- The third
$uri/matches the directory- The fourth
=404returns the 404 error page if none of the preceding patterns match.
Taken from Serverfault answer
My updated version
If you add in the server block:
index index.html index.htm;
And modify try_files to look like this:
try_files $uri $uri/ =404;
It should work too.