nginx从一台服务器上的两个不同目录提供文件

时间:2020-11-05 15:47:25

标签: nginx nginx-config nginx-location

我的Web服务器的文件系统中具有以下目录结构:

-srv
 +---someDir
 |   +---mySite
 +---someOtherDir
     +---yourSite

mySiteyourSite都可以从同一nginx网络服务器的不同目录(浏览器地址栏中的路径)下使用,例如

http:// myServer / mySite和

http:// myServer / yourSite

我尝试在配置中有一个server条目,其中有两个location块(设置各不相同),但是没有一个提供预期的结果-都没有“服务器级”根条目,不是没有。例如(nginx.conf):

http {
    ...
    server {
        root /srv/;
        location = /mySite {
            root /srv/someDir/mySite/;
    }
}

正如我所说,所有root以及try_files等的组合都不同。

我认为应该有类似的东西

...
server {
    location = /mySite {
        root /srv/someDir/mySite/;
    }

    location = /yourSite {
        root /srv/someDir/yourSite/;
    }
}

我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是完全控制文件系统和URI命名空间,以便可以使用URI /path/to/root/foo/index.html访问/foo/中的应用程序,而/path/to/root/bar/index.html中的应用程序可以可以使用URI /bar/访问。

在这种情况下,不需要location块,并且root的值为/path/to/root,因为文件的路径名是通过将该值与URI连接而构造的。有关详细信息,请参见this document

例如:

server {
    server_name example.com;
    root /path/to/root;
}

以上服务器块将对http://example.com/foo/处的应用程序foo和http://example.com/bar/处的应用程序栏进行罚款。


如果顶级目录元素的名称与顶级URI元素的名称不同,则需要在alias块中使用location指令。有关详细信息,请参见this document

例如:

server {
    server_name example.com;

    location /foo/ {
        alias /path/to/foos/directory/;
    }
    location /bar/ {
        alias /path/to/bars/directory/;
    }
}

location值和alias值都应以/结尾,或者都不以/结尾。

请注意,location指令用于 =运算符,该运算符仅用于匹配单个URI。有关详细信息,请参见this document