nginx 配置:迁移静态资源 - 如何在原有配置下,优先别名个别路径?

我写了一个新的多页项目,想用来代替已有的线上项目,在配置 nginx 的时候遇见了这个问题。
已有的老项目有多个路由:

/react/app     老
/react/app/a   老
/react/app/b   老
/react/app/c   老

我现在写了一个新项目,具有两个路由:

/react/app     新
/react/app/new 新

请问该如何配置 nginx,使得用户可以访问:

/react/app     新
/react/app/a   老
/react/app/b   老
/react/app/c   老
/react/app/new 新

我尝试过:

在老的nginx配置之前加上^~配置
location ^~ /react/app {
    alias path/to/my/dist/
}

这不行,因为 abc 也变成新的了

使用 if 配合 location
if ($uri !~ "(a|b|c)") {
    location ^~ /react/app {
        alias path/to/my/dist/
    }
}

告诉我不能在这个地方使用 alias

正则
location ~* ^/react/app(new)?$ {
    alias path/to/my/dist
}

实测不行,猜测是访问 index.html 又匹配到后面老的配置了

阅读 1.7k
2 个回答

nginx 的顺序是从上到下的,那个最佳匹配就走哪一个,所以你的 location 按照这个顺序去写就好了。

/react/app/a   老
/react/app/b   老
/react/app/c   老
/react/app/new 新
/react/app     新

大概是


location ~* ^/react/app/(a|b|c) {
  # 旧的
}

location ~* ^/react/app(/new)?{
  # 新的
}

nginx的location是让步最长匹配原则,所以你只需要将新旧两个location分开就行了:

location /react/app {
  alias /path/to/new/location;
}

location ~ ^/react/app/(a|b|c) {
  alias /path/to/old/location;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题