dispatch.yaml的语义

ald*_*del 6 google-app-engine app-engine-flexible

我正在查看有关dispatch.yaml的各种页面,其中大部分都包含类似的信息和示例:

https://cloud.google.com/appengine/docs/flexible/nodejs/how-requests-are-routed#routing_with_a_dispatch_file https://cloud.google.com/appengine/docs/python/config/dispatchref https:// cloud.google.com/appengine/docs/go/config/dispatchref

我碰巧在GAE Flexible Environment上使用node.js,但我认为对每种语言和环境都是一样的.

问题是这些页面并没有真正指定dispatch.yaml的工作方式.特别是:

  1. 是否按照给定的顺序应用规则?我假设第一个匹配规则是使用的规则,但似乎没有任何说法.
  2. 前导的glob(通配符)字符只与域名匹配,还是可以匹配URL路径的第一部分?如果规则是*/hello,那会匹配myapp.appspot.com/path/hello吗?基于文档中的一些模糊提示,我猜不是,但它不是很清楚.
  3. 如果dispatch.yaml中的规则与URL不匹配,它是否会路由到默认服务?我认为它必须,但再次,这些页面不说.
  4. 在将URL发送到服务之前,是否会根据规则重写URL?如果规则是*/path/*并且URL是https://myapp.appspot.com/path/hello,那么服务是否会将其视为/path/hello或如此/hello?我在猜测前者.

我现在正在做一些试验和错误,所以我很快就能回答我自己的问题.我也是通过他们的文档反馈系统将此提交给Google.

ald*_*del 6

到目前为止我知道的事情:

  1. 是的,规则是按顺序尝试的。因此,例如,如果您希望一个 URL 转到特定服务,而所有其他 URL 转到另一个服务,则应首先指定特定的 URL:``` dispatch:

    • 网址:“*/特定”模块:特定

    • url: " / " module: general ``` 如果你把这些规则放在相反的顺序,模块specific将永远不会被使用,因为 URL/specific将被通配符规则捕获。

  2. 未知

  3. 是的。您可以通过发出不匹配任何dispatch.yaml规则的请求并查看default的服务日志来测试这一点。

  4. 没有重写。如果规则是*/path/*并且实际 URL 是https://myapp.appspot.com/path/hello,您的服务应该仍然处理/path/hello,而不是/hello

  • 另一个“要知道的事情”是必须有意部署 dispatch.yaml:只需部署具有默认 CLI 参数的应用程序(即`glcoud app deploy --project my-project`)将部署 app.yaml、cron.yaml、队列.yaml 和 index.yaml 如果在项目根目录中找到,但不会_部署 dispatch.yaml。在不部署 dispatch.yaml 的情况下,所有请求将继续转到 `default` 服务。 (2认同)