尽管有vcl规则,但不会忽略子域

时间:2014-06-27 20:07:16

标签: apache caching reverse-proxy varnish varnish-vcl

我在端口80上运行了一个带有apache的基本灯服务器,在端口81上运行了清漆。我试图完全排除主站点的子域,但是到目前为止我没有运气这样做,而且我&# 39;我不知道为什么。

如下所示,我有一条规则:A)跳过子域上的登录用户,B)完全跳过子域。然而,这些似乎都不起作用。我的vcl配置有问题吗?

backend default {
.host = "my.server.ip.address";
.port = "80";
}



sub vcl_recv {
call identify_device;

    # Allow the back-end to serve up stale content if it is responding slowly.
    set req.grace = 2m;

    # Always cache the following file types for all users.
    if ( req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$" ) {
            unset req.http.cookie;
    }

    # Don't serve cached pages to logged in users
    if ( req.http.cookie ~ "wordpress_logged_in" || req.url ~ "vaultpress=true" ) {
            return( pass );
    }

    #Lets skip the logged in users on subdomain too!
    if ( req.http.cookie ~ "dmr_user" ) {
    return (pass);
    }

    #skip subdomain.domain.com
    if (req.http.host ~ "subdomain.domain.com") {
    return (pass);
    }

    #Following for WooCommerce and comments
    if (req.url ~ "^/(cart|my-account|checkout|addons|wp-comments-post)") {
    return (pass);
    }

    #Lets skip the logged in users on entries too!
    if ( req.http.cookie ~ "dmr_user" ) {
    return (pass);
    }

    if ( req.url ~ "\?add-to-cart=" ) {
     return (pass);
     }

    # Drop any cookies sent to WordPress.
    if ( ! ( req.url ~ "wp-(login|admin)" ) ) {
            unset req.http.cookie;
    }        

}

sub vcl_fetch {


if (beresp.ttl < 180s) {
set beresp.ttl = 180s;
}
    if (!(req.url ~ "wp-(login|admin)")) {
            unset beresp.http.set-cookie;
    }

}

sub vcl_hash {
    hash_data(req.http.X-Device);
}


sub vcl_deliver {
    if (obj.hits > 0) {
            set resp.http.X-Cache = "HIT";
    } else {
            set resp.http.X-Cache = "MISS";
    }

}

2 个答案:

答案 0 :(得分:1)

您只是在处理中途跳过子域的处理,即按顺序执行指令。直接在sub vcl_recv顶部移动跳过域检查应确保不会对针对该子域的请求执行其他规则。

答案 1 :(得分:0)

好吧,伙计们,事实证明我需要的是使用管道而不是通过。

#skip subdomain.domain.com
if (req.http.host ~ "subdomain.domain.com") {
return (pass);
}

现在是

#skip subdomain.domain.com
if (req.http.host ~ "subdomain.domain.com") {
return (pipe);
}

我也继续前进并将其移至配置的顶部。它现在总是像魅力一样。感谢大家的帮助!