使用子域上不同的根文件夹在多个位置配置Nginx


202

我希望将子域的根URL和子域的目录提供给服务器上的两个不同文件夹。这是我已有但不起作用的简单设置...

server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
            root /web/test.example.com/www;
    }

    location /static {
            root /web/test.example.com/static;
    }
}

在此示例中,test.example.com/将带入索引文件/web/test.example.com/www

并将要test.example.com/static带入索引文件/web/test.example.com/static

Answers:


238

您需要将alias指令用于location /static

server {

  index index.html;
  server_name test.example.com;

  root /web/test.example.com/www;

  location /static/ {
    alias /web/test.example.com/static/;
  }

}

nginx的维基解释比我的根,别名更好的区别:

请注意,乍一看,它看起来可能类似于root指令,但是文档的root不会改变,只是用于请求的文件系统路径。在Nginx问题中删除了请求的位置部分。

注意,rootalias尾随斜杠的处理方式不同。


67
他不需要alias。请阅读官方文档,而不是用户填写的社区Wiki。Quote:当location与指令值的最后一部分匹配时,最好使用root指令
VBart

9
这对我有用,除了缺少斜杠。别名应显示为:alias /web/test.example.com/static/;
ajma 2014年

8
@VBart文档确实说出了您引用他们所说的话,但是他们根本没有为该指令辩护-似乎是一个任意的样式选择。您看到背后的任何逻辑原因吗?
Mark Amery

104

位置指令系统是

就像您要转发所有开始的请求/static以及您的数据存在/var/www/static

因此,将最后一个文件夹与完整路径分开是一个简单的方法,这意味着

完整路径 : /var/www/static

最后路径:/static 和第一个路径:/var/www

location <lastPath> {
    root <FirstPath>;
}

因此,让我们看看您犯了什么错误以及您的解决方案是什么

您的错误:

location /static {
    root /web/test.example.com/static;
}

您的解决方案:

location /static {
    root /web/test.example.com;
}

2
这帮助了我:使我意识到我需要重命名文件夹或设置符号链接以使事情正常进行。
cjm

3
非常感谢你,我正是这样失败的:)
bobmoff

10
这似乎对“自由做我想做的事情”有相当严格的限制。我希望从某个路径开始的URI从其物理文件路径中不包含该URI路径的目录提供。使用此解决方案,我被迫将文档放在磁盘中以“ / static”结尾的路径下。我一点都不喜欢。我想要将文件放到所需位置的绝对和完全的自由。
SzczepanHołyszewski,19年

48
server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
        root /web/test.example.com/www;
    }

    location /static {
        root /web/test.example.com;
    }
}

http://nginx.org/r/root


2
问有什么不同?
TangMonk 2015年

5
@Wooden的区别:root /web/test.example.com;代替root /web/test.example.com/static;。nginx将位置指定的路径映射到目录树,并且由于该路径和源目录共享相同的名称,因此可以使用root
rmoestl '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.