80

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

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

.html位于的文件/home/www-data/mysite/public/doc/foo/bar.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则返回默认值。

4

1 回答 1

112

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

当 location 与指令值的最后一部分匹配时:最好使用 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;
  }       
}
于 2012-10-09T19:43:25.680 回答