Reverse-Proxy

子 vcl_recv |Magento + 清漆

  • March 7, 2012

我想請人幫忙。我瀏覽了很多包含 Varnish 教程和範例 VCL 文件的頁面,但我找不到任何與為 Magento 配置 Varnish 相關的內容(至少它們不能正常工作)。

我發現的所有手冊在 Varnish 啟動期間都引發了很多錯誤,而且似乎適合舊版本。(此外,沒有一個 magento 模組 PageCache 和 Varnish Extension 對我不起作用,因為我認為 Varnish 本身不能正常工作)

我的問題:

  1. 我讓 Varnish 記憶體前端,但它破壞了我的表單、支付模組、時事通訊訂閱等的幾乎所有功能。

  2. 我發現在“sub vcl_recv”中更改了一個詞" 改變一切 單詞是:return(lookup)。這是我的“sub vcl_recv”的程式碼:

sub vcl_recv {

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(server.ip ~ a168_144_38_181){
   set req.backend = b168_144_38_181;
   }
}
if (req.url ~ "^/images") {
   unset req.http.cookie;
} 
   if (req.url ~ "^(/index.php)?/(admin|customer|checkout|add|product_compare|switch|___store|referer|contact|chat|payone|sendfriend|review|api|NOCACHE|post|robots.txt|j2tajaxcheckout|cron.php|varnish)") {
   return(pass);
}
if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {
set req.http.user-agent = "Mozilla";
unset req.http.Https;
unset req.http.cookie;
return (lookup);
}
  if (req.request != "GET" &&
  req.request != "HEAD" &&
  req.request != "PUT" &&
  req.request != "POST" &&
  req.request != "TRACE" &&
  req.request != "OPTIONS" &&
  req.request != "DELETE") {
    /* Non-RFC2616 or CONNECT which is weird. */
    return (pipe);
}
#parse accept encoding rulesets to normalize
if (req.http.Accept-Encoding) {
   if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {
     # no need of compression
     remove req.http.Accept-Encoding;
   } elsif  (req.http.Accept-Encoding ~ "gzip") {
       set req.http.Accept-Encoding = "gzip";
   } elsif (req.http.Accept-Encoding ~ "deflate") {
       set req.http.Accept-Encoding = "deflate";
} else {
# unknown algorithm
remove req.http.Accept-Encoding;

remove req.http.Cookie;
remove req.http.X-Pass;
set req.grace = 30s;    

return (lookup);
}
}

有人可以幫我設置嗎?

任何幫助將不勝感激!!!

謝謝你。托馬斯

看起來你的 Varnish 配置錯誤

基本上你應該將請求傳遞給後端,如果它們不是 GET 或 HEAD

if (req.request != "GET" && req.request != "HEAD") {
return (pass);
}

接下來,您應該檢查您的會話管理並將使用者傳遞到後端(如果存在一些 cookie)。不能說任何關於標準 Magento cookie 的事情,還沒有使用它

引用自:https://serverfault.com/questions/367045