基于nginx路径的路由

9vw9lbht  于 2022-11-02  发布在  Nginx
关注(0)|答案(2)|浏览(228)

我想基于一个路径将请求路由到两个不同的Angular应用程序。因此,当我请求http://example.com/admin时,http://example.com/client路由到一个应用程序,http://example.com/client路由到第二个应用程序。我有以下配置,但所有请求总是发送到nginx默认页。配置如下:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name _;

        location /admin {
                root /home/ubuntu/apps/admin/;
                index index.html;
                try_files $uri $uri/ /index.html?$args;
        }

        location /client {
                root /home/ubuntu/apps/client;
                index index.html;
                try_files $uri $uri/ /index.html?$args;
        }
}

/etc/nginx/sites-enabled中没有其他配置文件,nginx.conf是Ubuntu默认的安装后配置文件。如有任何帮助,我们将不胜感激。

bsxbgnwa

bsxbgnwa1#

您使用了错误的root指令值。在这两个位置中,root指令的正确值都是/home/ubuntu/apps,这意味着您可以通过将一个root指令移到server块中,从而只使用它来简化配置。
当然,您可以使用alias指令-但正如手册所述:
当location与指令值的最后一部分匹配时...最好使用root指令。
另一个问题是您的try_files语句指向了错误的index.html文件。
例如:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /home/ubuntu/apps;

    location /admin {
        try_files $uri $uri/ /admin/index.html;
    }

    location /client {
        try_files $uri $uri/ /client/index.html;
    }
}

请注意,server_name _;不是必需的-请参阅“服务器名称”文档。
此外,index index.html;不一定是index指令的默认值。

dluptydi

dluptydi2#

看起来你不能使用多个root指令,而是需要使用aliasConfigure nginx with multiple locations with different root folders on subdomain)。这样,我仍然会得到404,直到我从index.html中删除$args。之后一切都正常工作(不要问花了多长时间才弄清楚)。工作配置:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name _;
        index index.html;

        location /admin {
                alias /home/ubuntu/apps/admin;
                try_files $uri /index.html =404;
        }

        location /client {
                alias /home/ubuntu/apps/client;
                try_files $uri /index.html =404;
        }
}

相关问题