清除具有多个后端的清漆缓存

时间:2017-03-01 18:00:30

标签: caching varnish

我有一个清漆缓存,在nginx ssl终止节点后面,根据url路由到两个不同的后端(都运行wordpress)。 " /"被路由到serverA和" / about /"被路由到serverB。

如果我首先在本地curl -X PURGE http://127.0.0.1/卷曲,设置缓存,然后# Based off of https://gist.github.com/matthewjackowski/062be03b41a68edbadfc # Marker to tell the VCL compiler that this VCL has been adapted to the # new 4.0 format. vcl 4.0; import directors; # Default backend definition. Set this to point to your content server. backend default { .host = "serverA"; .port = "80"; .connect_timeout = 600s; .first_byte_timeout = 600s; .between_bytes_timeout = 600s; .max_connections = 800; } backend bedrock { .host = "serverB"; .port = "80"; .connect_timeout = 600s; .first_byte_timeout = 600s; .between_bytes_timeout = 600s; .max_connections = 800; } # Only allow purging from specific IPs acl purge { "localhost"; "127.0.0.1"; } # This function is used when a request is send by a HTTP client (Browser) sub vcl_recv { # Normalize the header, remove the port (in case you're testing this on various TCP ports) set req.http.X-Forwarded-For = client.ip; set req.backend_hint = default; # Unset headers that might cause us to cache duplicate infos unset req.http.Accept-Language; unset req.http.User-Agent; set req.http.X-Forwarded-Proto = "https"; if (req.url == "/") { set req.backend_hint = bedrock; } # Allow purging from ACL if (req.method == "PURGE") { # If not allowed then a error 405 is returned if (!client.ip ~ purge) { return(synth(405, "This IP is not allowed to send PURGE requests.")); } # If allowed, do a cache_lookup -> vlc_hit() or vlc_miss() return (purge); } # drop cookies and params from static assets if (req.url ~ "\.(gif|jpg|jpeg|swf|ttf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") { unset req.http.cookie; set req.url = regsub(req.url, "\?.*$", ""); } # drop tracking params, only needed on the frontend. if (req.url ~ "\?(utm_(campaign|medium|source|term)|adParams|client|cx|eid|fbid|feed|ref(id|src)?|v(er|iew))=") { set req.url = regsub(req.url, "\?.*$", ""); } # pass wp-admin urls if (req.url ~ "wp-(login|admin)" || req.url ~ "preview=true" || req.url ~ "xmlrpc.php") { return (pass); } # pass wp-admin cookies if (req.http.cookie) { if (req.http.cookie ~ "(wordpress_|wp-settings-)") { return(pass); } else { unset req.http.cookie; } } } # Drop any cookies Wordpress tries to send back to the client. sub vcl_backend_response { # Remove some headers we never want to see unset beresp.http.Server; unset beresp.http.X-Powered-By; # This function is used when a request is sent by our backend (Nginx server) if (bereq.http.Cookie ~ "(UserID|_session)") { set beresp.http.X-Cacheable = "NO:Got Session"; set beresp.uncacheable = true; return (deliver); } elsif (beresp.ttl <= 0s) { # Varnish determined the object was not cacheable set beresp.http.X-Cacheable = "NO:Not Cacheable"; } elsif (beresp.http.set-cookie) { # You don't wish to cache content for logged in users set beresp.http.X-Cacheable = "NO:Set-Cookie"; set beresp.uncacheable = true; return (deliver); } elsif (beresp.http.Cache-Control ~ "private") { # You are respecting the Cache-Control=private header from the backend set beresp.http.X-Cacheable = "NO:Cache-Control=private"; set beresp.uncacheable = true; return (deliver); } else { # Varnish determined the object was cacheable set beresp.http.X-Cacheable = "YES"; # Remove Expires from backend, it's not long enough unset beresp.http.expires; # Set the clients TTL on this object set beresp.http.cache-control = "max-age=900"; # Set how long Varnish will keep it set beresp.ttl = 1d; } if ( (!(bereq.url ~ "((wp/)?wp-(login|admin)|login)")) || (bereq.method == "GET") ) { set beresp.http.X-UnsetCookies = "TRUE"; unset beresp.http.set-cookie; set beresp.ttl = 1h; } if (bereq.url ~ "\.(gif|jpg|jpeg|swf|ttf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") { set beresp.ttl = 1d; } } # The routine when we deliver the HTTP request to the user # Last chance to modify headers that are sent to the client sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "cached"; } else { set resp.http.x-Cache = "uncached"; } # Remove some headers: PHP version unset resp.http.X-Powered-By; # Remove some headers: Apache version & OS unset resp.http.Server; # Remove some headers: Varnish unset resp.http.X-Varnish; } ,则会清除缓存。

如果我从我们的nginx ssl终止服务器点击它,然后尝试使用相同的curl命令清除缓存,它不会清除通过nginx服务器创建的缓存项。

vcl文件:

*   << BeReq    >> 3         
-   Begin          bereq 2 fetch
-   Timestamp      Start: 1488390891.742004 0.000000 0.000000
-   BereqMethod    GET
-   BereqURL       /
-   BereqProtocol  HTTP/1.0
-   BereqHeader    X-Prerender-Token: qUcOM8XD5dRKUvlnCaMx
-   BereqHeader    X-Real-IP: 10.224.20.1
-   BereqHeader    Host: ssl-sermination-domain.com
-   BereqHeader    Upgrade-Insecure-Requests: 1
-   BereqHeader    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
-   BereqHeader    DNT: 1
-   BereqHeader    X-Forwarded-For: 10.224.20.146
-   BereqHeader    X-Forwarded-Proto: https
-   BereqHeader    Accept-Encoding: gzip
-   BereqProtocol  HTTP/1.1
-   BereqHeader    X-Varnish: 3
-   VCL_call       BACKEND_FETCH
-   VCL_return     fetch
-   BackendOpen    20 boot.bedrock 10.240.0.4 80 10.224.20.148 39350
-   BackendStart   10.240.0.4 80
-   Timestamp      Bereq: 1488390891.743281 0.001276 0.001276
-   Timestamp      Beresp: 1488390891.863164 0.121160 0.119883
-   BerespProtocol HTTP/1.1
-   BerespStatus   200
-   BerespReason   OK
-   BerespHeader   Date: Wed, 01 Mar 2017 17:54:51 GMT
-   BerespHeader   Server: Apache/2.4.7 (Ubuntu)
-   BerespHeader   X-Powered-By: PHP/5.5.9-1ubuntu4.21
-   BerespHeader   Link: <https://ssl-sermination-domain.com/wp-json/>; rel="https://api.w.org/"
-   BerespHeader   Link: <https://ssl-sermination-domain.com/>; rel=shortlink
-   BerespHeader   Vary: Accept-Encoding
-   BerespHeader   Content-Encoding: gzip
-   BerespHeader   Access-Control-Allow-Origin: *
-   BerespHeader   Cache-Control: Public
-   BerespHeader   Max-Age: 600
-   BerespHeader   Content-Length: 6396
-   BerespHeader   Content-Type: text/html; charset=UTF-8
-   TTL            RFC 120 10 -1 1488390892 1488390892 1488390891 0 0
-   VCL_call       BACKEND_RESPONSE
-   BerespUnset    Server: Apache/2.4.7 (Ubuntu)
-   BerespUnset    X-Powered-By: PHP/5.5.9-1ubuntu4.21
-   BerespHeader   X-Cacheable: YES
-   BerespUnset    Cache-Control: Public
-   BerespHeader   cache-control: max-age=900
-   TTL            VCL 86400 10 0 1488390892
-   BerespHeader   X-UnsetCookies: TRUE
-   TTL            VCL 3600 10 0 1488390892
-   VCL_return     deliver
-   Storage        malloc s0
-   ObjProtocol    HTTP/1.1
-   ObjStatus      200
-   ObjReason      OK
-   ObjHeader      Date: Wed, 01 Mar 2017 17:54:51 GMT
-   ObjHeader      Link: <https://ssl-sermination-domain.com/wp-json/>; rel="https://api.w.org/"
-   ObjHeader      Link: <https://ssl-sermination-domain.com/>; rel=shortlink
-   ObjHeader      Vary: Accept-Encoding
-   ObjHeader      Content-Encoding: gzip
-   ObjHeader      Access-Control-Allow-Origin: *
-   ObjHeader      Max-Age: 600
-   ObjHeader      Content-Length: 6396
-   ObjHeader      Content-Type: text/html; charset=UTF-8
-   ObjHeader      X-Cacheable: YES
-   ObjHeader      cache-control: max-age=900
-   ObjHeader      X-UnsetCookies: TRUE
-   Fetch_Body     3 length stream
-   Gzip           u F - 6396 27271 80 80 51104
-   BackendReuse   20 boot.bedrock
-   Timestamp      BerespBody: 1488390891.863519 0.121514 0.000355
-   Length         6396
-   BereqAcct      331 0 331 435 6396 6831
-   End            

*   << Request  >> 2         
-   Begin          req 1 rxreq
-   Timestamp      Start: 1488390891.741888 0.000000 0.000000
-   Timestamp      Req: 1488390891.741888 0.000000 0.000000
-   ReqStart       10.224.20.146 33370
-   ReqMethod      GET
-   ReqURL         /
-   ReqProtocol    HTTP/1.0
-   ReqHeader      X-Prerender-Token: qUcOM8XD5dRKUvlnCaMx
-   ReqHeader      X-Real-IP: 10.224.20.1
-   ReqHeader      X-Forwarded-For: 10.224.20.1
-   ReqHeader      Host: ssl-sermination-domain.com
-   ReqHeader      X-Forwarded-Proto: https
-   ReqHeader      Connection: close
-   ReqHeader      Cache-Control: max-age=0
-   ReqHeader      Upgrade-Insecure-Requests: 1
-   ReqHeader      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko)     Chrome/56.0.2924.87 Safari/537.36
-   ReqHeader      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
-   ReqHeader      DNT: 1
-   ReqHeader      Accept-Encoding: gzip, deflate, sdch, br
-   ReqHeader      Accept-Language: en-US,en;q=0.8
-   ReqHeader      Cookie: __qca=P0-1762908153-1488362085426; _mkto_trk=id:503-BAR-730&token:_mch-ssl-termination.com-1488362085634-71558; calltrk_referrer=direct;     calltrk_landing=https%3A//www.ssl-termination.com/about/; optimizelyEndUserId=oeu1488387324154r0.4330785754032478; op
-   ReqUnset       X-Forwarded-For: 10.224.20.1
-   ReqHeader      X-Forwarded-For: 10.224.20.1, 10.224.20.146
-   VCL_call       RECV
-   ReqUnset       X-Forwarded-For: 10.224.20.1, 10.224.20.146
-   ReqHeader      X-Forwarded-For: 10.224.20.146
-   ReqUnset       Accept-Language: en-US,en;q=0.8
-   ReqUnset       User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko)     Chrome/56.0.2924.87 Safari/537.36
-   ReqUnset       X-Forwarded-Proto: https
-   ReqHeader      X-Forwarded-Proto: https
-   ReqUnset       Cookie: __qca=P0-1762908153-1488362085426; _mkto_trk=id:503-BAR-730&token:_mch-ssl-termination.com-1488362085634-71558; calltrk_referrer=direct;     calltrk_landing=https%3A//www.ssl-termination.com/about/; optimizelyEndUserId=oeu1488387324154r0.4330785754032478; op
-   VCL_return     hash
-   ReqUnset       Accept-Encoding: gzip, deflate, sdch, br
-   ReqHeader      Accept-Encoding: gzip
-   VCL_call       HASH
-   VCL_return     lookup
-   VCL_call       MISS
-   VCL_return     fetch
-   Link           bereq 3 fetch
-   Timestamp      Fetch: 1488390891.863387 0.121500 0.121500
-   RespProtocol   HTTP/1.1
-   RespStatus     200
-   RespReason     OK
-   RespHeader     Date: Wed, 01 Mar 2017 17:54:51 GMT
-   RespHeader     Link: <https://ssl-sermination-domain.com/wp-json/>; rel="https://api.w.org/"
-   RespHeader     Link: <https://ssl-sermination-domain.com/>; rel=shortlink
-   RespHeader     Vary: Accept-Encoding
-   RespHeader     Content-Encoding: gzip
-   RespHeader     Access-Control-Allow-Origin: *
-   RespHeader     Max-Age: 600
-   RespHeader     Content-Length: 6396
-   RespHeader     Content-Type: text/html; charset=UTF-8
-   RespHeader     X-Cacheable: YES
-   RespHeader     cache-control: max-age=900
-   RespHeader     X-UnsetCookies: TRUE
-   RespHeader     X-Varnish: 2
-   RespHeader     Age: 0
-   RespHeader     Via: 1.1 varnish-v4
-   VCL_call       DELIVER
-   RespHeader     x-Cache: uncached
-   RespUnset      X-Varnish: 2
-   VCL_return     deliver
-   Timestamp      Process: 1488390891.863412 0.121524 0.000025
-   RespHeader     Accept-Ranges: bytes
-   Debug          "RES_MODE 2"
-   RespHeader     Connection: close
-   Timestamp      Resp: 1488390891.863608 0.121720 0.000196
-   ReqAcct        1089 0 1089 501 6396 6897
-   End            

*   << Session  >> 1         
-   Begin          sess 0 HTTP/1
-   SessOpen       10.224.20.146 33370 0.0.0.0:8081 10.224.20.148 8081 1488390891.741828 14
-   Link           req 2 rxreq
-   SessClose      RESP_CLOSE 0.122
-   End     
缓存页面 时

varnishlog输出
*   << Request  >> 98364     
-   Begin          req 98363 rxreq
-   Timestamp      Start: 1488390373.620924 0.000000 0.000000
-   Timestamp      Req: 1488390373.620924 0.000000 0.000000
-   ReqStart       127.0.0.1 56100
-   ReqMethod      PURGE
-   ReqURL         /
-   ReqProtocol    HTTP/1.1
-   ReqHeader      User-Agent: curl/7.35.0
-   ReqHeader      Host: 127.0.0.1:8081
-   ReqHeader      Accept: */*
-   ReqHeader      X-Forwarded-For: 127.0.0.1
-   VCL_call       RECV
-   ReqUnset       X-Forwarded-For: 127.0.0.1
-   ReqHeader      X-Forwarded-For: 127.0.0.1
-   ReqUnset       User-Agent: curl/7.35.0
-   ReqHeader      X-Forwarded-Proto: https
-   VCL_acl        MATCH purge "localhost"
-   VCL_return     purge
-   VCL_call       HASH
-   VCL_return     lookup
-   VCL_call       PURGE
-   VCL_return     synth
-   Timestamp      Process: 1488390373.620977 0.000052 0.000052
-   RespHeader     Date: Wed, 01 Mar 2017 17:46:13 GMT
-   RespHeader     Server: Varnish
-   RespHeader     X-Varnish: 98364
-   RespProtocol   HTTP/1.1
-   RespStatus     200
-   RespReason     OK
-   RespReason     Purged
-   VCL_call       SYNTH
-   RespHeader     Content-Type: text/html; charset=utf-8
-   RespHeader     Retry-After: 5
-   VCL_return     deliver
-   RespHeader     Content-Length: 240
-   Storage        malloc Transient
-   RespHeader     Accept-Ranges: bytes
-   Debug          "RES_MODE 2"
-   RespHeader     Connection: keep-alive
-   Timestamp      Resp: 1488390373.621082 0.000158 0.000106
-   ReqAcct        80 0 80 218 240 458
-   End            

*   << Session  >> 98363     
-   Begin          sess 0 HTTP/1
-   SessOpen       127.0.0.1 56100 0.0.0.0:8081 127.0.0.1 8081 1488390373.620850 18
-   Link           req 98364 rxreq
-   SessClose      REM_CLOSE 0.000
-   End            
清除时

varnishlog

import matplotlib.pyplot as plt
from random_walk import RandomWalk

rw = RandomWalk()
rw.fill_walk()

plt.scatter(rw.x_values,rw.y_values,s=15)
plt.show()

编辑:

我相信我需要一个不同的清除命令,因为如果我进入清漆盒并运行以下内容:

  1. 在本地(未缓存)卷曲网址
  2. 在本地(缓存)
  3. 卷曲网址
  4. 本地再次清除卷发
  5. 在本地(未缓存)卷曲网址
  6. 在本地(缓存)
  7. 卷曲网址

    它按预期工作。

1 个答案:

答案 0 :(得分:1)

我查看了默认的vcl_hash并弄明白了。我需要发送Host标头,它会正确地破坏缓存。

curl -X PURGE http://127.0.0.1:8081/ -H "Host: ssl-termination-domain.com"