使用nginx从给定目录的子目录提供静态文件

我在我的服务器上有几组静态.html文件,我想用nginx直接提供服务。 例如,nginx应该提供以下模式的URI:

 www.mysite.com/public/doc/foo/bar.html 

与位于/home/www-data/mysite/public/doc/foo/bar.html.html文件相关/home/www-data/mysite/public/doc/foo/bar.html 。 您可以将foo视为设置名称,并将其作为文件名称。

我不知道是否接下来的nginxconfiguration会做这个工作:

 server { listen 8080; server_name www.mysite.com mysite.com; error_log /home/www-data/logs/nginx_www.error.log; error_page 404 /404.html; location /public/doc/ { autoindex on; alias /home/www-data/mysite/public/doc/; } location = /404.html { alias /home/www-data/mysite/static/html/404.html; } } 

换句话说,模式/public/doc/.../....html中的所有请求都将由nginx处理,如果找不到任何给定的URI,则默认为www.mysite.com/404.html被返回。

它应该工作,但是http://nginx.org/en/docs/http/ngx_http_core_module.html#alias说:;

当位置匹配指令值的最后部分时:最好使用root指令:

这将产生:

 server { listen 8080; server_name www.mysite.com mysite.com; error_log /home/www-data/logs/nginx_www.error.log; error_page 404 /404.html; location /public/doc/ { autoindex on; root /home/www-data/mysite; } location = /404.html { root /home/www-data/mysite/static/html; } }