【问题标题】:Is it possible to increase CloudFlare time-out?是否可以增加 CloudFlare 超时?
【发布时间】:2016-11-26 22:21:00
【问题描述】:

是否可以增加 CloudFlare 的超时时间?如果是,怎么做?

我的代码需要一段时间才能执行,而且我不打算在接下来的几天里对其进行 Ajaxifying。

【问题讨论】:

  • 您可以通过不在 Cloudflare 上的子域处理耗时超过 100 秒的请求。
  • @RuudLenders:我向 CloudFlare 询问了这个问题,他们说:“我会建议验证为什么报告需要超过 100 秒。在子域上禁用 Cloudflare,允许攻击者知道您的源 IP,并且攻击者将直接绕过 Cloudflare 进行攻击。”
  • Cloudflare 超时返回 524。如果您收到 504,则表示您的服务器正在超时

标签: timeout cloudflare connection-timeout


【解决方案1】:

https://support.cloudflare.com/hc/en-us/articles/115003011431-Troubleshooting-Cloudflare-5XX-errors#502504error

Cloudflare 524 错误是由于网页需要 100 多秒才能完全响应。

如果您更改为“企业”Cloudflare 帐户,这可以覆盖(最多)600 秒。 Enterprise 的成本约为每年 4 万美元(需要签订年度合同)。

【讨论】:

    【解决方案2】:

    如果您使用 curl 获取结果,则可以使用解析选项直接访问您的 IP,而不是使用 Cloudflare 代理 IP:

    例如:

    curl --max-time 120 -s -k --resolve lifeboat.com:443:127.0.0.1 -L https://lifeboat.com/blog/feed 
    

    【讨论】:

      【解决方案3】:

      Cloudflare 在超时时不会触发 504 错误

      • 504 是超时由您的服务器触发 - 与 Cloudflare 无关。
      • 524 是由 Cloudflare 触发的超时。

      见:https://support.cloudflare.com/hc/en-us/articles/115003011431-Troubleshooting-Cloudflare-5XX-errors#502504error

      524 错误?有一个解决方法:

      正如@mjsa 所提到的,Cloudflare 仅向企业客户端提供超时设置,这对大多数人来说不是一个选项。

      但是,您可以通过将橙色云变为灰色来禁用该特定(子)域的 Cloudflare 代理:

      之前:

      之后:

      注意:它将禁用该特定(子)域的额外功能,包括 IP 掩码和 SSL 证书。

      正如 Cloudflare 在其文档中所述:

      如果您定期运行需要超过 100 秒的 HTTP 请求 完成(例如大数据导出),考虑移动那些 长时间运行的进程到未被代理的子域 云耀斑。该子域的橙色云图标将切换为 Cloudflare DNS 设置中的灰色。请注意,您不能使用 Page 规避错误 524 的规则。

      【讨论】:

        【解决方案4】:

        我知道它不能被视为一种解决方案,但有两种方法可以避免这种情况。 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 中的占比很高,所以我决定写下这个答案,以供那些觉得它有用的人参考。

        【讨论】:

          【解决方案5】:

          我就同样的问题与 Cloudflare 进行了沟通,并获得了 RabbitMQ 的技术支持。

          RabbitMQ 建议使用依赖于 Web Sockets 的 Web Stomp。但是 Cloudflare 建议...

          Websockets 将通过 Cloudflare 创建持久连接,并 没有超时,但解决这个问题的最佳方法是 只是在后台处理请求并异步响应,并提供“正在加载...”页面或类似页面,而不是让用户等待 100 秒。这也将为用户提供更好的用户体验

          更新:

          为了完整起见,我在这里也记录一下 我还向 CloudFlare 询问了有关通过子域运行报告并将其“灰云化”的问题,他们的回答如下:

          我会建议验证为什么它需要超过 100 秒 报告。在子域上禁用 Cloudflare,允许攻击者 了解您的原始 IP,攻击者将直接攻击 绕过 Cloudflare。

          进一步更新

          我最终通过使用线程运行报表并使用 AJAX “轮询”报表是否已创建来解决了这个问题。见Bypassing CloudFlare's time-out of 100 seconds

          【讨论】:

          • 不保持请求连接意味着我们需要一个双向通信通道,以便在原始请求完成后将响应反馈给客户端。所以我们不能像往常一样使用 ajax(在前端),或者仅仅使用它来发布请求并几乎立即获得 OK 响应。实际结果会通过如使用SignalR(这应该比轮询更好)来接收
          【解决方案6】:

          不,CloudFlare 只提供那种customisation on Enterprise plans

          • 如果 CloudFlare 在 15 秒后未能建立 HTTP 握手,它将超时。
          • CloudFlare 还会等待 100 秒等待来自服务器的 HTTP 响应,然后您才会看到 524 timeout error
          • 除此之外,您的源站 Web 服务器上可能会出现超时。

          听起来你需要Inter-Process Communication。 HTTP 不应该被用作在不发送响应的情况下执行阻塞任务的机制,这些活动应该被抽象为服务器上的非 HTTP 服务。通过使用 RabbitMQ(或任何其他 MQ),您可以将消息从服​​务器的 HTTP 元素传递到 Web 服务器上的处理服务。

          【讨论】:

          • 似乎 90 秒超时现在是 60 秒。
          猜你喜欢
          • 2011-02-26
          • 1970-01-01
          • 2014-12-20
          • 2012-02-29
          • 2015-06-21
          • 1970-01-01
          • 2018-02-02
          • 2022-06-29
          • 2016-04-19
          相关资源
          最近更新 更多