努力让它发挥作用。我有一个由两个服务组成的应用程序 - 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>
当我导航到前端应用程序的 URL 时,它按预期工作。但是,当我访问<frontend-app>-dot-apt-aleph-767.appspot.com/backend
时,我得到了404。 。这没有意义,因为当我直接导航到后端 URL 时,它会按预期工作。
plzhalp。
最佳答案
为此,您需要后端服务来处理对 /<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>
进一步完善:
- 最后一个 URL 可以删除,因为它是多余的 - 即 default routing by URL行为
- 因为后端服务需要处理
/backend/*
您也可以使用通配符第一个 URL 的主机部分,该部分可按原样与 appspot.com 和自定义域(如果您有的话)一起使用:
所以这样就足够了:
dispatch:
- url: "*/backend/*"
service: <backend-app>
或者,您可以删除 "<frontend-app>-dot-apt-aleph-767.appspot.com/backend/"
来自调度文件的 URL 并教导您的前端服务接受,但重定向任何 /backend/<somepath>
请求它看到 <backend-app>-dot-apt-aleph-767.appspot.com/<somepath>
.
关于javascript - 在dispatch.yaml中的同一域上配置两个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47158703/