php - 应用引擎 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”的人路由到我的主应用程序。没有重定向
解决方案
您无需执行任何操作(除了确保您的代码不假定请求的完整 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 路径来确定域
推荐阅读
- reactjs - 在顶层使用带有上下文 api 的 useSelector 挂钩以提高性能
- matlab - 如何改变点云中平面的位置?
- mongodb - MongoDB Mongoose 在日期范围内选择文档
- javascript - ajax数据表,无法检索数据
- jquery - 请求了不受支持的 HTTP 方法“OPTIONS”,而我设置为 HTTP 方法:“POST”
- laravel - Laravel 嵌套 Foreach 的常见问题视图试图获取非对象的属性
- java - 如何向洋葱服务器发送http请求?
- html - 布局菜单项,更改所选页面“项目”的样式
- prometheus-alertmanager - Alertmanager 中的指纹字段是否唯一?
- android - Ionic 4 与 Ionic 3 中的后台工作人员