2012-07-11 129 views
1

我不知道是否有人可以建議我做錯了什麼。Varnish前端服務器,Litespeed後端服務器

我在前端服務器上設置了Varnish,並且這個工作正常。我可以將多個公共網站的IP地址放入此配置(包括CNN)中,並由Varnish緩存。

當我把我的一個站點IP地址放到Varnish中時,我從Litespeed服務器收到404錯誤 - 這表明它連接到服務器,但顯然沒有選擇正確的站點來顯示Varnish。我在Litespeed服務器上有幾個域,每個域都有自己的IP地址。直接網址也一樣。

這是我猜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" 

回答

0

要在您的服務器上光油勢必什麼端口?你使用Litespeed的端口是什麼?

如果你可以在這裏發佈你的配置文件給你進一步的建議,這將是有用的。

+0

目前,Varnish和Litespeed都綁定到端口80。由於他們在不同的服務器上,我希望這不會有問題。我已將代碼添加到原始帖子中。謝謝。 – 2012-07-11 15:42:27

+0

順便說一下,我也嘗試在不同的端口上放置清漆。沒有什麼區別讓我覺得Litespeed有問題。 – 2012-07-11 15:48:24

+0

在不同的服務器上使用端口80是可以的。當您嘗試通過清漆訪問Litespeed時,是否檢查過傳入的請求?也許某些清漆規則會以Litespeed無法正確傳遞的方式修改您的請求?您可以將將Litespeed直接調用時創建的日誌條目與調用varnish時創建的日誌條目進行比較。 – Marc 2012-07-13 12:02:27