【问题标题】:How to purge Varnish cache when using Cloudflare?使用 Cloudflare 时如何清除清漆缓存?
【发布时间】:2018-04-07 22:47:02
【问题描述】:

使用 Cloudflare 时,清除似乎不起作用(Cloudflare 返回 403 Forbidden)。
这是我在网上搜索解决方案时得到的:
“问题是,当你使用cloudflare时,varinsh没有得到发送者的原始IP,而是得到了cloudflare的IP。所以无法进行清除。我们需要告诉清漆发送者的原始IP 。”
在 vcl_recv

中添加以下行 if (req.restarts == 0) {
if (req.http.X-Forwarded-For) {
设置 req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
} 其他 {
设置 req.http.X-Forwarded-For = client.ip;
}
}
if (req.method == "PURGE" || req.url == "/purge") {
# 将这些 IP 替换为您的 IP
if ( req.http.X-Forwarded-For !~ "(209.152.41.21|105.45.120.37)") {
return(synth(405, "此 IP 不允许发送 PURGE
请求。")); }
ban("req.url ~ /");
返回(清除);
}
我尝试了这个解决方案,但没有奏效。

【问题讨论】:

    标签: varnish cloudflare purge


    【解决方案1】:

    这个问题很老,但仍然可以使用答案。 :-) 您找到的报价部分正确。原因如下:

    您的设置可能类似于以下内容:

     ------      ---------      ------------            ------
    |  WP  | <- | Varnish | <- | CloudFlare |   <---   | User |
     ------      ---------      ------------            ------
    

    清除有两种方式:

    1. 用户 -> CloudFlare -> Varnish,或
    2. 用户 -> CloudFlare -> Varnish -> WP -> WP 插件 -> Varnish。

    第二种情况可以成功地导致清除。如果您有一个触发缓存清除/无效的插件,它将来自可预测的 IP 地址。事实上,如果你在与 WP 相同的服务器上运行 varnish,IP 地址将是 [127.0.0.1]。有一个nice implementation for this situation

    第一种情况(直接从 CloudFlare 中清除)的问题是 CloudFlare has many IP addresses 您必须保持最新状态。但更重要的是,没有什么可以阻止不良行为者也使用 CloudFlare 创建服务,该服务还可以向您的服务器发送清除请求,基本上使这种安全性毫无价值

    由于 X-Forwarded-For 基本上只是一路上所有以前 IP 地址的列表,这也很容易伪造和绕过。

    由于直接通过 CloudFlare 过滤 IP 地址没有用处,因此您也可以使用作为清除请求的一部分发送的令牌/秘密。 (即只允许一个特殊的 URL,如: if (req.url == "/purge-719179c7-6226-4b87-9503-1b6d54d5fea5") {... 当然还有其他一些指导)。有人可能会说这仍然不安全,但可能比允许所有 CloudFlare IP 更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-12
      • 2022-11-28
      • 2016-12-17
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2013-01-09
      • 2012-08-07
      相关资源
      最近更新 更多