2015-06-27 1 views
0

у меня есть постоянная проблема с лаком для конкретного сайта, лак в другом месте (работа штраф после следовать официальное руководство по лаковой-WordPress) https://www.varnish-software.com/blog/step-step-speed-wordpress-varnish-softwareкак удалить PHPSESSIONID из кэша лака

на том же сервере есть другой сайт (no cms), на этом сайте есть проблема с кешированием с лака, в заголовке показано max age = 0, поэтому не кеш, вероятно, потому что есть файл cookie PHPSESSIONID, я тестирую каждое руководство онлайн, но без решения.

это мой заголовок:

HTTP/1.1 200 OK 
Server: Apache/2.2.27 (Unix) mod_ssl/2.2.27 OpenSSL/1.0.1e-fips 
X-Powered-By: PHP/5.4.27 
Set-Cookie: PHPSESSID=xxxxxxxxxxxxxxxxxxxxxx; path=/ 
Content-Type: text/html 
Content-Length: 40627 
Accept-Ranges: bytes 
Date: Sat, 27 Jun 2015 10:56:14 GMT 
X-Varnish: 1838947681 
Age: 0 
Via: 1.1 varnish 
Connection: keep-alive 

и это мой default.vcl:

# This is a basic VCL configuration file for varnish. See the vcl(7) 
# man page for details on VCL syntax and semantics. 
# 
# Default backend definition. Set this to point to your content 
# server. 
# 
backend default { 
    .host = "127.0.0.1"; 
    .port = "82"; 
} 
# 
# Below is a commented-out copy of the default VCL logic. If you 
# redefine any of these subroutines, the built-in logic will be 
# appended to your code. 
# 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") { 
#   /* Non-RFC2616 or CONNECT which is weird. */ 
#   return (pipe); 
#  } 
#  if (req.request != "GET" && req.request != "HEAD") { 
#   /* We only deal with GET and HEAD by default */ 
#   return (pass); 
#  } 
#  if (req.http.Authorization || req.http.Cookie) { 
#   /* Not cacheable by default */ 
#   return (pass); 
#  } 
#  return (lookup); 
# } 
# 
# sub vcl_pipe { 
#  # Note that only the first request to the backend will have 
#  # X-Forwarded-For set. If you use X-Forwarded-For and want to 
#  # have it set for all requests, make sure to have: 
#  # set bereq.http.connection = "close"; 
#  # here. It is not set by default as it might break some broken web 
#  # applications, like IIS with NTLM authentication. 
#  return (pipe); 
# } 
# 
# sub vcl_pass { 
#  return (pass); 
# } 
# 
# sub vcl_hash { 
#  hash_data(req.url); 
#  if (req.http.host) { 
#   hash_data(req.http.host); 
#  } else { 
#   hash_data(server.ip); 
#  } 
#  return (hash); 
# } 
# 
# sub vcl_hit { 
#  return (deliver); 
# } 
# 
# sub vcl_miss { 
#  return (fetch); 
# } 
# 
# sub vcl_fetch { 
#  if (beresp.ttl <= 0s || 
#   beresp.http.Set-Cookie || 
#   beresp.http.Vary == "*") { 
#  /* 
#  * Mark as "Hit-For-Pass" for the next 2 minutes 
#  */ 
#  set beresp.ttl = 120 s; 
#  return (hit_for_pass); 
#  } 
#  return (deliver); 
# } 
# 
# sub vcl_deliver { 
#  return (deliver); 
# } 
# 
# sub vcl_error { 
#  set obj.http.Content-Type = "text/html; charset=utf-8"; 
#  set obj.http.Retry-After = "5"; 
#  synthetic {" 
# <?xml version="1.0" encoding="utf-8"?> 
# <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
# "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
# <html> 
# <head> 
#  <title>"} + obj.status + " " + obj.response + {"</title> 
# </head> 
# <body> 
#  <h1>Error "} + obj.status + " " + obj.response + {"</h1> 
#  <p>"} + obj.response + {"</p> 
#  <h3>Guru Meditation:</h3> 
#  <p>XID: "} + req.xid + {"</p> 
#  <hr> 
#  <p>Varnish cache server</p> 
# </body> 
# </html> 
# "}; 
#  return (deliver); 
# } 
# 
# sub vcl_init { 
# return (ok); 
# } 
# 
# sub vcl_fini { 
# return (ok); 
# } 

это некоторые настройки имеют последующие: 1)

sub vcl_recv { 
    // Remove all cookies except the session ID. 
    if (req.http.Cookie) { 
     set req.http.Cookie = ";" + req.http.Cookie; 
     set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";"); 
     set req.http.Cookie = regsuball(req.http.Cookie, ";(PHPSESSID)=", "; \1="); 
     set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", ""); 
     set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", ""); 

     if (req.http.Cookie == "") { 
      // If there are no more cookies, remove the header to get page cached. 
      remove req.http.Cookie; 
     } 
    } 
} 

2)

sub vcl_fetch { 
    if (!(beresp.http.Set-Cookie ~ "LOGIN") && !(req.http.cookie ~ "LOGIN")) { 
    unset beresp.http.Pragma; 
    unset beresp.http.Set-Cookie; 
    set beresp.http.Cache-Control = "public; max-age=1800"; 
    unset beresp.http.Expires; 
    set beresp.ttl = 30m; 
    return (deliver); 
    } 
} 

sub vcl_recv { 
    if (req.http.Cookie ~ "LOGIN") { 
    set req.http.Cookie = ";" req.http.Cookie; 
    set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";"); 
    set req.http.Cookie = regsuball(req.http.Cookie, ";(PHPSESSID|LOGIN)=", "; 1="); 
    set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", ""); 
    set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", ""); 
    if (req.http.Cookie == "") { 
     remove req.http.Cookie; 
    } 
    } else { 
    remove req.http.Cookie; 
    } 
} 

А ТАКЖЕ ЭТО: https://www.varnish-cache.org/trac/wiki/VCLExampleRemovingSomeCookies

другая идея?

ответ

0

В моем случае это было вызвано изменением заголовка.

Vary: Accept-Encoding будет создать другой объект кэша для каждой отдельной принимают кодирующую заголовка

Vary: User-Agent создаст другой объект кэша для каждого отдельного агента пользователя

хорошего объяснения этого можно найти по адресу: https://www.maxcdn.com/blog/accept-encoding-its-vary-important/

Если вы меняете заголовок только на Accept-encoding, также обязательно нормализуйте его в своем vcl_rcv с помощью следующего кода. , как описано на https://www.varnish-cache.org/docs/3.0/tutorial/vary.html

### parse accept encoding rulesets to normalize 
if (req.http.Accept-Encoding) { 
    if (req.url ~ "\.(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|mp4|flv)$") { 
     # don't try to compress already compressed files 
     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 { 
     # unkown algorithm 
     remove req.http.Accept-Encoding; 
    } 
} 
Смежные вопросы