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

nginx serving files from two different directories on one server

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

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

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

http:///myServer/mySite 和

http:///myServer/yourSite

我尝试在配置中使用一个 server 条目和两个 location 块(具有不同的设置),但 none 提供了预期的结果 - 两者都没有“服务器级别”根条目,并非没有。例如 (nginx.conf):

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

就像我说的,都是 roottry_files 等的不同组合

我认为应该可以有这样的东西

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

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

我的错误在哪里?

最简单的解决方案是您可以完全控制文件系统和 URI 名称空间,以便可以使用 URI /foo/ 和 [=14= 中的应用程序访问 /path/to/root/foo/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/ 和应用程序 bar 在 http://example.com/bar/.

处罚款应用程序 foo

如果顶级目录元素与顶级 URI 元素的名称不同,您将需要在 location 块中使用 alias 指令。有关详细信息,请参阅 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