Nginx多个根


13

我想将请求转移到特定的子目录,再转移到另一个根目录。怎么样?我现有的块是:

server {
    listen       80;
    server_name  www.domain.com;

    location / {
        root   /home/me/Documents/site1;
        index  index.html;
    }

    location /petproject {
        root   /home/me/pet-Project/website;
        index  index.html;
        rewrite ^/petproject(.*)$ /$1;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    } }

也就是说,http://www.domain.com应该为/home/me/Documents/site1/index.html提供服务,而http://www.domain.com/petproject应该为/ home / me / pet-Project / website提供服务/index.html-替换后,nginx似乎会重新运行所有规则,而http://www.domain.com/petproject仅提供/home/me/Documents/site1/index.html。

Answers:


28

该配置具有nginx通常会发生的常见问题。也就是说,rootlocation块内部使用指令。

尝试使用此配置代替当前的location块:

root /home/me/Documents/site1;
index index.html;

location /petproject {
    alias /home/me/pet-Project/website;
}

这意味着您的网站的默认目录为/home/me/Documents/site1,对于/petprojectURI,内容从/home/me/pet-Project/website目录提供。


4

您需要将break标志添加到重写规则中,以便处理停止,并且由于它位于位置块内,因此处理将在该块内继续进行:

rewrite ^/petproject/?(.*)$ /$1 break;

请注意,我还添加/?了匹配模式,以免在URL开头不以双斜杠结尾。


当使用alias指令时,这里根本不需要重写,就像应该在这里使用它一样。
Tero Kilkanen 2015年
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.