【问题标题】:prevent Varnish double cache with N subdomains/normalize host only for varnish防止带有 N 个子域的 Varnish 双重缓存/仅针对 varnish 规范化主机
【发布时间】:2014-02-07 20:22:43
【问题描述】:

我有一堆看起来像这样的子域:

http://u-c2f86nr3pa.example.org/?s=1
http://u-v1cfu8dsta.example.org/?s=1

它们的内容不同,但静态文件 CSS/JS/Favicon 是一样的。我想为它们规范化主机名,但我不想为 PHP 脚本规范化它,因为它基于子域工作。

有没有一种方法可以让 varnish 知道这些域是常见的,并且应该为它们缓存一次静态?

【问题讨论】:

    标签: php regex apache varnish varnish-vcl


    【解决方案1】:

    您可以在 Varnish 配置的 vcl_recv 部分有条件地重写 Host 标头。您将需要一种方法来识别哪些 URL 用于静态内容。这是一个例子;具体的正则表达式取决于您网站的结构。

    sub vcl_recv {
        # Normalize Host if URL is one of:
        #     /css/*   /js/*   /favicon*
        if (req.http.Host ~ "^u-\w+\.example\.org$" &&
            req.url ~ "^/(css/|js/|favicon)")
        {
            set req.http.Host = "u-xxxxxxxxx.example.org";
        }
    }
    

    您的后端 Web 服务器将看到重写后的主机,因此请确保将其规范化为它可以识别的名称。

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 2016-12-10
      • 1970-01-01
      • 2016-01-21
      相关资源
      最近更新 更多