答案 0 :(得分:23)
不,CloudFlare只提供那种customisation on Enterprise plans。
听起来你需要Inter-Process Communication。 HTTP不应该被用作执行阻塞任务而不发送响应的机制,而是应该将这些类型的活动抽象到服务器上的非HTTP服务。通过使用RabbitMQ(或任何其他MQ),您可以将消息从服务器的HTTP元素传递到Web服务器上的处理服务。
答案 1 :(得分:8)
我与Cloudflare就同一问题进行了沟通,并且还得到了RabbitMQ的技术支持。
RabbitMQ建议使用依赖Web套接字的Web Stomp。然而Cloudflare建议......
Websockets将通过Cloudflare创建持久连接 这样没有超时,但解决这个问题的最佳方法是 只是在后台处理请求并异步响应,并提供“正在加载...”页面或类似,而不是让用户等待100秒。这也将为用户提供更好的用户体验
更新:
为了完整起见,我还会在此记录 我还问过CloudFlare关于通过子域运行报告并“灰化”它,他们回复如下:
我建议验证为什么需要超过100秒的时间 报告。在子域上禁用Cloudflare,允许攻击者 知道你的起源IP和攻击者将直接攻击 绕过Cloudflare。
进一步更新
我终于通过使用线程运行报告并使用AJAX“轮询”报告是否已创建来解决此问题。见Bypassing CloudFlare's time-out of 100 seconds
答案 2 :(得分:1)
我知道不能将其视为解决方案,但是有两种方法可以避免这种情况。 1)由于此超时通常与长时间生成某些东西有关,因此可以通过crontab进行此类工作,或者如果您有权访问SSH,则可以直接运行PHP命令来执行。在这种情况下,连接不会通过Cloudflare提供服务,因此只要您的配置允许其运行,连接就会一直保持下去。在Google上检查如何从命令行运行脚本,或者如何使用/ usr / bin / php /direct/path/to/file.php
在crontab中确定脚本2)您可以创建未添加到cloudlflare的子域,然后将脚本移至该域,然后直接通过URL,Ajax调用或任何其他方式运行它们。
在Cloudflare社区论坛上有一个很好的答案:
如果您需要脚本运行超过100秒左右而又不将任何数据返回到浏览器,则无法通过Cloudflare运行这些脚本。有两个选项:通过灰白云的子域运行脚本或更改脚本,以便启动长时间运行的后台进程并快速返回一个状态,浏览器可以轮询该状态,直到后台进程完成为止。点可以返回完整的响应。这是大多数人执行这种操作的方式,因为长时间保持HTTP连接打开不可靠,而且也很麻烦。
这个关于Stackoverflow的主题在SERP中很普遍,因此我决定为那些认为有用的人写下这个答案。
答案 3 :(得分:0)
正如@mjsa 提到的,Cloudflare 只为企业客户端提供超时设置,这对大多数人来说不是一个选项。
但是,您可以通过将橙色云变成灰色来禁用该特定(子)域的 Cloudflare 代理:
之前:
之后:
<块引用>注意:它将禁用该特定(子)域的额外功能,包括 IP 掩码和 SSL 证书。
正如 Cloudflare 在其文档中所述:
<块引用>如果您经常运行需要超过 100 秒的 HTTP 请求 完成(例如大数据导出),考虑移动那些 长时间运行的进程到未代理的子域 云耀斑。该子域会将橙色云图标切换为 Cloudflare DNS 设置中的灰色。请注意,您不能使用页面 规避错误 524 的规则。