2012-10-09 80 views
41

我在我的服务器上有几组静态.html文件,我想用nginx直接提供它们。例如,nginx的应该服务的URI以下图案:使用nginx提供给定目录的子目录中的静态文件

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

回答

61

它应该工作,但是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; 
    }  
} 
+0

感谢您的提示!但是有一个问题,我需要在这里使用'^(/ public/doc /)'这样的正则表达式吗?或者'/ public/doc /'很好? – MLister

+0

just/public/doc /在这种情况下已经足够了,实际上稍微好一点,因为它不会增加正则表达式匹配的负担(小) – cobaco