在dispatch.yaml中的同一域上配置两个服务

时间:2017-11-07 13:03:01

标签: javascript google-app-engine gcloud

努力让它发挥作用。我有一个由两个服务组成的应用程序 - Angular中的前端,Node中的后端。

调度:

  - url: "<frontend-app>-dot-apt-aleph-767.appspot.com/"
    service: <frontend-app>
  - url: "<frontend-app>-dot-apt-aleph-767.appspot.com/backend/"
    service: <backend-app>

这是gcloud app describe的输出:

dispatchRules:
- domain: <frontend-app>-dot-apt-aleph-767.appspot.com
  path: /
  service: <frontend-app>

- domain: <frontend-app>-dot-apt-aleph-767.appspot.com
  path: /backend/*
  service: <frontend-app>

当我导航到前端应用程序的网址时,它按预期工作。但是,当我去<frontend-app>-dot-apt-aleph-767.appspot.com/backend时,我得到了404。它没有意义,因为当我直接导航到后端URL时,它按预期工作。

plzhalp。

1 个答案:

答案 0 :(得分:1)

要实现此目的,您需要后端服务以相同的方式处理/<somepath>/backend/<somepath>的请求。

检查你的后端应用日志,你会看到你希望它处理的请求,但是它对404响应的请求包含/backend前缀,而请求直接到后端URL没有'吨。

另请注意,调度规则的顺序很重要 - 您首先需要更具体的一个,否则永远不会到达,因为更通用的一个将匹配之前的请求。您可能还想在请求路径中添加一些通配符:

dispatch:
- url: "<frontend-app>-dot-apt-aleph-767.appspot.com/backend/*"
  service: <backend-app>
- url: "<frontend-app>-dot-apt-aleph-767.appspot.com/*"
  service: <frontend-app>

进一步完善:

  • 最后一个网址可以删除,因为它是多余的 - 这就是default routing by URL行为
  • 因为后端服务需要处理/backend/*,所以你可以使用通配符第一个URL的主机部分,它可以与appspot.com和自定义域一起使用(如果你有一个):

所以这应该足够了:

dispatch:
- url: "*/backend/*"
  service: <backend-app>

或者,您可以从调度文件中删除"<frontend-app>-dot-apt-aleph-767.appspot.com/backend/"网址,并教导您的前端服务接受,但将其看到的/backend/<somepath>个请求重定向到<backend-app>-dot-apt-aleph-767.appspot.com/<somepath>