使用 nginx 为来自给定目录的子目录的静态文件提供服务

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

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

与位于 /home/www-data/mysite/public/doc/foo/bar.html.html文件。在这里,您可以将 foo视为集合名称,将 bar视为文件名。

我想知道下面的 nginx 配置是否可以完成这项工作:

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

205869 次浏览

It should work, however http://nginx.org/en/docs/http/ngx_http_core_module.html#alias says:

When location matches the last part of the directive’s value: it is better to use the root directive instead:

which would yield:

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;
}
}