php - 防止带有 N 个子域的 Varnish 双缓存/仅用于 varnish 的规范化主机

标签 php regex apache varnish varnish-vcl

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

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

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

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

最佳答案

您可以在Varnish配置的 vcl_recv 部分中有条件地重写Host header 。您将需要一种方法来标识哪些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服务器将看到重写的主机,因此请确保将其标准化为它可以识别的名称。

关于php - 防止带有 N 个子域的 Varnish 双缓存/仅用于 varnish 的规范化主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21203952/

相关文章:

php - 在 WooCommerce 中获取客户上次订单的产品

php - 在mysql中提交多个和单个提交按钮

javascript - 从另一个正则表达式中排除一个正则表达式

regex - perl正则表达式通过关键字查找Java StackTrace

sql - 如何通过 Postgres 中的检查约束来验证 URL?

php - Chatbot - 如何通过单一响应识别和处理多个请求

php - 我无法使用 json 在本地主机服务器中发布数据和图像

mysql - Magento -- MySQL 大量 CPU 使用率,然后在批量更新产品类别时失败

android - java.lang.NoSuchFieldError : org. apache.http.message.BasicHeaderValueFormatter.INSTANCE android

apache - OpenId 连接 : adding extra/custom parameter at the token endpoint call