246

我希望将子域的根 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

4

5 回答 5

280

您需要将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 wiki比我更好地解释了 root 和 alias 之间的区别:

请注意,它乍一看可能类似于 root 指令,但文档根目录没有改变,只是用于请求的文件系统路径。请求的位置部分被丢弃在 Nginx 发出的请求中。

请注意,rootalias以不同的方式处理尾部斜杠。

于 2012-07-20T06:22:52.433 回答
127

位置指令系统是

就像你想转发所有开始的请求/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;
}
于 2015-05-04T19:36:30.003 回答
54
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;
    }
}

https://nginx.org/en/docs/http/ngx_http_core_module.html#root

于 2012-07-20T16:17:37.343 回答
6

一个更详细的例子。

设置:您有一个网站,example.com并且您有一个网络应用程序example.com/webapp

...
server {
  listen 443 ssl;
  server_name example.com;

  root   /usr/share/nginx/html/website_dir;
  index  index.html index.htm;
  try_files $uri $uri/ /index.html;

  location /webapp/ {
    alias  /usr/share/nginx/html/webapp_dir/;
    index  index.html index.htm;
    try_files $uri $uri/ /webapp/index.html;
  }
}
...

我已经命名webapp_dir并且website_dir是故意的。如果您有匹配的名称和文件夹,则可以使用该root指令。

此设置有效,并已使用 Docker 进行测试。

注意!!!小心斜线。完全按照示例中的方式放置它们。

于 2020-09-15T21:24:22.347 回答
1

如果你使用这个,我建议你也设置这个命令。

location /static/ {
    proxy_set_header Host $host/static; // if you change the directory and the browser can't find your path
    alias /web/test.example.com/static/;
}
于 2021-08-02T18:49:42.940 回答