一个域下的两个 ember-cli 应用程序的 nginx 位置冲突

一个域下的两个 ember-cli 应用程序的 nginx 位置冲突

我正在尝试在 nginx 上的一个域下设置 2 个 ember-cli 应用程序。

http://example.com/
http://example.com/bar

App 1 存储在 /var/www/foo 下,App 2 存储在 /var/www/bar 下。

第一个目标是让主根指向 /var/www/bar,并将其设置为/指向 foo 和/指向 bar。这主要是为了保持设置方式的一致性。不过,我很乐意改变设置,让它正常工作。

我有以下 nginx 代码片段:

server {
    listen 80;
    server_name www.example.com;
    root /var/www/bar;

    location /bar {
        root /;
        try_files $uri $uri/ /index.html?/$request_uri;
    }

    location / {
        root /var/www/foo;
        try_files $uri /index.html?/$request_uri;
    }
}

我尝试过其他方法,但还是无法正常工作。似乎location /覆盖了位置/bar/。如果我注释掉location /指令,则/bar可以工作,但显然不行/。反之亦然。如何让这两者一起工作?

笔记:此时,ember-cli 并不是真正的促成因素。只要让 index.html 文件工作就可以了。

答案1

指令中的最后一个参数try_files是 fallback code、location 或 URI。对于后两种情况,nginx 会进行内部重定向,因此预期的行为是转到 location 。你还在location bar 指令/中犯了一个错误,它将匹配你的文件系统的根目录!root/

您需要将 fallback URI 更改为/bar/index.html?/$request_uri。如果理解正确的话,您希望从 提供 bar 的 index.html /var/www/bar/index.html。两种解决方案:

[1]

server {
    listen 80;
    server_name www.example.com;
    root /var/www;

    location /bar {
        try_files $uri $uri/ /bar/index.html?/$request_uri;
    }

    location / {
        root /var/www/foo;
        try_files $uri /index.html?/$request_uri;
    }
}

[2]

server {
    listen 80;
    server_name www.example.com;
    root /var/www/bar;

    location /bar/ {
        alias /var/www/bar/;
        try_files $uri $uri/ /bar/index.html?/$request_uri;
    }

    location / {
        root /var/www/foo;
        try_files $uri /index.html?/$request_uri;
    }
}

相关内容