Nginx两个角度应用程序

Nginx两个角度应用程序,nginx,Nginx,我想在特定路径下添加单独的angular应用程序(路径应位于要匹配的URL的末尾)-我想保留当前版本和新版本,但新版本应仅在指定路径下可用。我尝试使用alias+try\u文件。我的配置: server { listen 80; root /dir/project1 server_name ...; index index.html; location ~ /path { alias /dir/project2 try_files $uri $uri/ /

我想在特定路径下添加单独的angular应用程序(路径应位于要匹配的URL的末尾)-我想保留当前版本和新版本,但新版本应仅在指定路径下可用。我尝试使用alias+try\u文件。我的配置:

server {
  listen 80;
  root /dir/project1
  server_name ...;

  index index.html;

  location ~ /path {
    alias /dir/project2
    try_files $uri $uri/ /index.html;
  }

问题是,当try_文件启动时,它从root指令获取路径,而不是从别名获取路径。如何修复它?我只能在此处添加我不能使用proxy\u pass,并且root而不是别名也不起作用,因为它添加了路径等。

alias
指令放置在正则表达式位置内时工作方式不同,但您可能还是应该使用前缀位置。有关详细信息,请参阅

此外,同时使用
别名
try_文件
可能会导致问题(请参阅)

您正在将URI重写为
/index.html
,这是错误的应用程序,应改为
/path/index.html

尝试:


如果您缺少一些
,请参见
的使用s,但我想这只是你问题中的一个输入错误。理查德,谢谢。使用提供的配置,我能够正确地读取index.html,但仍然存在一些问题。有一点是,只有当路径位于起始URL e.x.domain.com/path时,此位置才起作用,而对于domain.com/something/path则不起作用。第二件事是它正确加载index.html,但不加载样式和js文件,因为/path稍后不会出现在URL中的这些请求中。但可能是应用程序问题?设置angular app build固定加载资产的基本url路径。是的,
base
是重新定位资产的一个很好的解决方案。可以使用正则表达式位置,但这只会使别名复杂化。
/somthing/path
是否总是一个路由而不是一个静态文件?在这种情况下,您可以添加另一个位置(例如,
location~/path{rewrite^/path/index.html last;}
不幸的是,它不起作用。添加另一个位置没有帮助,因为使用URL/{something}/path返回403。{something}应该是动态的,因为它可以自由修改。所以我想要实现的是domain.com/{something}应该运行旧的应用程序,但是domain.com/{something}/path应该运行新的应用程序-当{something}根本不存在时也是如此(这适用于第一个位置解决方案)。
location ^~ /path {
    alias /dir/project2;
    if (!-e $request_filename) {
        rewrite ^ /path/index.html last;
    }
}