首页 > 解决方案 > 应用引擎 PHP - 自定义域上的 Cron 无法工作(始终指向 apppot)

问题描述

有没有办法将 cron 指向正在使用的域?例如,我的 cron 在 /example 上(在我的 cron.yaml 中),这个 cron 将始终在“all_appspot_url/cron”上运行 如果我在域 example.com 上,我如何让 cron 直接在 example 上运行。 com/cron?

编辑:所以,为了澄清,现在我收到了这个主机的 cron 请求:

example.appspot.com

如果我必须让 cron 到另一个域, example2.com我必须手动管理它吗? 示例 2示例完全不同

EDIT2:好的,我的主要应用程序在example.appspot.com. 现在,如果我需要自定义域,例如我有人在example2.com,有人在example3.com,其他人在example4.com我需要为每个人运行“自定义”的 cron。我必须采用实际的“域”,例如,如果我在 example3.com 上,我需要打印 example3.com。我认为有一些 SDK 功能可以用 PHP “获取”实际主机名,但我找不到。

EDIT3:也许我只需要一个 dispatch.yaml 而不需要获取主机名?因为也许我可以将使用“example/url/customUrl”的人路由到我的主应用程序。没有重定向

标签: phpgoogle-app-enginecron

解决方案


您无需执行任何操作(除了确保您的代码不假定请求的完整 URL 中的某个域)。您应该能够向相应的自定义域 URL 发送(手动)请求,并且它们也应该得到处理。

cron 服务和可能其他一些特定于 GAE 的服务(如任务队列)在 GAE 基础设施“内部”运行,它们不知道自定义域映射。这就是 cron 服务使用域发出GET请求的原因。appspot.com

我什至怀疑这可能正是向您的应用程序报告的内容(出于兼容性原因),但实际上,在发出请求时,cron 服务的实际实现甚至可能没有使用(即 DNS)。appspot.com

自定义域映射发生在 GAE 服务的边缘/外部。这是一个额外的路由决策,仅对来自 GAE 基础架构之外的请求是必需的 - 以确定应将请求定向到哪个 GAE 应用程序。内部 GAE 请求不需要浪费时间进行此类查找。

考虑到这一点,我认为这appspot.com实际上是“直接”方式,而自定义域是更长的路径:)

不,你无法改变这种行为。

更新:

澄清一下,您所说的地址是 cron 请求发送的地址,而不是来自的地址。所有 cron 请求(针对所有应用程序)都是从固定地址发送的。从保护 cron 的 URL

Google App Engine 从 IP 地址发出 Cron 请求0.1.0.1

更新2:

将同一个应用程序映射到多个域时,您实际上并不需要您询问的域检测功能:

  • 如果您的应用程序中只配置了一项 cron 作业,由所有域共享,则该功能毫无用处:您只会收到一个请求,检测域只会给您最多一个答案,因此您最多可以处理一个域,其他的将保持未处理状态。在这种情况下,您可以轻松地在该单个处理程序中为您配置的每个域进行迭代,因此在每次迭代中该域都是已知的

  • 如果您为每个域配置了一个 cron 作业,您可以简单地为每个域使用不同的 URL 配置(例如/cron/my_domain),您只需要解析 URL 路径来确定域


推荐阅读