1

我想知道是否有人可以建议我做错了什么。

我在前端服务器上设置了 Varnish,这是有效的。我可以把几个公共网站的IP地址(包括CNN)放到这个配置中,它们都被Varnish缓存了。

当我将我的站点 IP 地址之一放入 Varnish 时,我从 Litespeed 服务器收到 404 错误 - 这表明它正在连接到服务器,但显然没有选择正确的站点来显示 Varnish。我在 Litespeed 服务器上有几个域,每个域都有自己的 IP 地址。直接 URL 也是如此。

我猜这是 Litespeed 配置的问题 - 但我们将不胜感激。

作为参考,我正在使用 PageCache 的 VCL 配置文件,它是 Varnish 的 Magento 模块。

贾斯汀

# default backend definition.  Set this to point to your content server.
backend default {
  .host = "xxx.xxx.xxx.xxx";
  .port = "80";
}

# admin backend with longer timeout.
backend admin {
  .host = "xxx.xxx.xxx.xxx";
  .port = "80";
  .first_byte_timeout = 18000s;
  .between_bytes_timeout = 18000s;
}

# add your Magento server IP to allow purges from the backend
acl purge {
  "localhost";
  "127.0.0.1";
}


sub vcl_recv {
if (req.restarts == 0) {
    if (req.http.x-forwarded-for) {
        set req.http.X-Forwarded-For =
        req.http.X-Forwarded-For + ", " + client.ip;
    } else {
        set req.http.X-Forwarded-For = client.ip;
    }
}

if (req.request != "GET" &&
  req.request != "HEAD" &&
  req.request != "PUT" &&
  req.request != "POST" &&
  req.request != "TRACE" &&
  req.request != "OPTIONS" &&
  req.request != "DELETE" &&
  req.request != "PURGE") {
    /* Non-RFC2616 or CONNECT which is weird. */
    return (pipe);
}

# purge request
if (req.request == "PURGE") {
    if (!client.ip ~ purge) {
        error 405 "Not allowed.";
    }
    ban("obj.http.X-Purge-Host ~ " + req.http.X-Purge-Host + " && obj.http.X-Purge-URL ~ " + req.http.X-Purge-Regex + " && obj.http.Content-Type ~ " + req.http.X-Purge-Content-Type);
    error 200 "Purged.";
}

# switch to admin backend configuration
if (req.http.cookie ~ "adminhtml=") {
    set req.backend = admin;
}

# we only deal with GET and HEAD by default    
if (req.request != "GET" && req.request != "HEAD") {
    return (pass);
}

# normalize url in case of leading HTTP scheme and domain
set req.url = regsub(req.url, "^http[s]?://[^/]+", "");

# static files are always cacheable. remove SSL flag and cookie
if (req.url ~ "^/(media|js|skin)/.*\.(png|jpg|jpeg|gif|css|js|swf|ico)$") {
    unset req.http.Https;
    unset req.http.Cookie;
}

# not cacheable by default
if (req.http.Authorization || req.http.Https) {
    return (pass);
}

# do not cache any page from
# - index files
# - ...
if (req.url ~ "^/(index)") {
    return (pass);
}

# as soon as we have a NO_CACHE cookie pass request
if (req.http.cookie ~ "NO_CACHE=") {
    return (pass);
}

# normalize Aceept-Encoding header
# http://varnish.projects.linpro.no/wiki/FAQ/Compression
if (req.http.Accept-Encoding) {
    if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|flv)$") {
        # No point in compressing these
        remove req.http.Accept-Encoding;
    } elsif (req.http.Accept-Encoding ~ "gzip") {
        set req.http.Accept-Encoding = "gzip";
    } elsif (req.http.Accept-Encoding ~ "deflate" && req.http.user-agent !~ "MSIE") {
        set req.http.Accept-Encoding = "deflate";
    } else {
        # unkown algorithm
        remove req.http.Accept-Encoding;
    }
}

# remove Google gclid parameters
set req.url = regsuball(req.url,"\?gclid=[^&]+$",""); # strips when QS = "?gclid=AAA"
set req.url = regsuball(req.url,"\?gclid=[^&]+&","?"); # strips when QS = "?gclid=AAA&foo=bar"
set req.url = regsuball(req.url,"&gclid=[^&]+",""); # strips when QS = "?foo=bar&gclid=AAA" or QS = "?foo=bar&gclid=AAA&bar=baz"

return (lookup);
}


sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
    hash_data(req.http.host);
} else {
    hash_data(server.ip);
}
if (!(req.url ~ "^/(media|js|skin)/.*\.(png|jpg|jpeg|gif|css|js|swf|ico)$")) {
    call design_exception;
}
return (hash);
}

sub vcl_fetch {
if (beresp.status == 500) {
   set beresp.saintmode = 10s;
   return (restart);
}
set beresp.grace = 5m;

# add ban-lurker tags to object
set beresp.http.X-Purge-URL = req.url;
set beresp.http.X-Purge-Host = req.http.host;

if (beresp.status == 200 || beresp.status == 301 || beresp.status == 404) {
    if (beresp.http.Content-Type ~ "text/html" || beresp.http.Content-Type ~ "text/xml")     {
        if ((beresp.http.Set-Cookie ~ "NO_CACHE=") || (beresp.ttl < 1s)) {
            set beresp.ttl = 0s;
            return (hit_for_pass);
        }

        # marker for vcl_deliver to reset Age:
        set beresp.http.magicmarker = "1";

        # Don't cache cookies
        unset beresp.http.set-cookie;
    } else {
        # set default TTL value for static content
        set beresp.ttl = 4h;
    }
    return (deliver);
}

return (hit_for_pass);
}

sub vcl_deliver {
# debug info
if (resp.http.X-Cache-Debug) {
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
        set resp.http.X-Cache-Hits = obj.hits;
    } else {
       set resp.http.X-Cache = "MISS";
    }
    set resp.http.X-Cache-Expires = resp.http.Expires;
} else {
    # remove Varnish/proxy header
    remove resp.http.X-Varnish;
    remove resp.http.Via;
    remove resp.http.Age;
    remove resp.http.X-Purge-URL;
    remove resp.http.X-Purge-Host;
}

if (resp.http.magicmarker) {
    # Remove the magic marker
    unset resp.http.magicmarker;

    set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
    set resp.http.Pragma = "no-cache";
    set resp.http.Expires = "Mon, 31 Mar 2008 10:00:00 GMT";
    set resp.http.Age = "0";
}
}

sub design_exception {
}

和...

START=yes
NFILES=131072
MEMLOCK=82000
INSTANCE=$(uname -n)

## Alternative 2, Configuration with VCL
#
# Listen on port 6080, administration on localhost:6082, and forward to
# one content server selected by the vcl file, based on the request.  Use a 1GB
# fixed-size cache file.

DAEMON_OPTS="-a :80 \
         -T localhost:6082 \
         -f /etc/varnish/default.vcl \
         -S /etc/varnish/secret \
         -s malloc,256m"
4

2 回答 2

0

你的 Varnish 服务器绑定到哪个端口?Litespeed 使用什么端口?

如果您可以在此处发布您的配置文件为您提供进一步的建议,那将会很有用。

于 2012-07-11T15:30:08.987 回答
0

这就是我需要的!使用 Varnish 配置多个站点

我需要将虚拟主机名放入配置文件中。遵循本指南并让它立即工作!

于 2012-07-16T15:27:38.630 回答