在子域上配置具有不同根文件夹的多个位置的nginx

时间:2012-07-19 22:35:48

标签: nginx webserver

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

5 个答案:

答案 0 :(得分:202)

您需要使用alias的{​​{1}}指令:

location /static

nginx wiki更好地解释了root和别名之间的区别:

  

请注意,它看起来可能与root指令类似,但文档根目录不会发生变化,只是用于请求的文件系统路径。请求的位置部分将在请求Nginx问题中删除。

答案 1 :(得分:88)

The Location directive system is

Like you want to forward all request which start /static and your data present in /var/www/static

So a simple method is separated last folder from full path , that means

Full path : /var/www/static

Last Path : /static and First path : /var/www

location <lastPath> {
    root <FirstPath>;
}

So lets see what you did mistake and what is your solutions

Your Mistake :

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

Your Solutions :

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

答案 2 :(得分:44)

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

答案 3 :(得分: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/;
}

答案 4 :(得分:0)

更多详细的示例。

设置:您在example.com有一个网站,在example.com/webapp有一个Web应用程序

...
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_dirwebsite_dir。如果您具有匹配的名称和文件夹,则可以使用root指令。

此设置有效,并已在Docker上进行了测试。

注意!!!注意斜线。完全按照示例中的说明放置它们。