App Engine PHP-自定义域上的Cron无法正常工作(始终指向appspot)

时间:2018-11-05 17:07:10

标签: php google-app-engine cron

有一种方法可以将cron指向使用中的域? 例如,我的cron在/ example上(在我的cron.yaml内部),此cron将始终在“ all_appspot_url / cron”上运行 如果我在example.com域上,我该如何直接在example.com/cron上运行cron?

编辑: 因此,为了澄清一下,现在我向该主机发出了cron请求:

example.appspot.com

如果我必须将cron转到另一个域,请从 example2.com我必须手动进行管理吗? example2 example

完全不同

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

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

1 个答案:

答案 0 :(得分:2)

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

cron服务以及可能还有一些其他特定于GAE的服务(例如任务队列)在GAE基础结构内部运行,它们不了解自定义域映射。这就是cron服务使用GET域发出appspot.com请求的原因。

我什至怀疑这可能只是报告给您的应用程序(出于兼容性方面的考虑),但实际上,cron服务可能的实际实现甚至没有使用appspot.com(即DNS)。

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

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

不,您无法采取任何措施来更改此行为。

更新:

为澄清起见,您所讨论的地址是cron请求发送到的地址,是发给的,而不是发自的。所有Cron请求(针对所有应用)均从固定地址发送。来自Securing URLs for cron

  

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

Update2:

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

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

  • 如果每个域配置了一个cron作业,则可以为每个域使用不同的URL配置(例如/cron/my_domain),而只需解析URL路径即可确定域< / p>