Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
litespeed_wiki:cache:lscache:purge [2015/08/03 18:49] Michael Alegre [Create a wrapper script purge.php for PURGE] |
litespeed_wiki:cache:lscache:purge [2017/01/03 21:44] Michael Alegre Added Redirect. |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== LSCache PURGE ====== | + | ~~REDIRECT>litespeed_wiki:cache:no-plugin-advanced:purge~~ |
- | + | ||
- | ===== Summary ===== | + | |
- | As of 4.1.12, LSWS supports cache PURGE operation to accommodate the demand on cache manipulation. | + | |
- | + | ||
- | ===== Procedures ===== | + | |
- | Here are the steps to PURGE cache: | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== Create a wrapper script purge.php for PURGE ==== | + | |
- | + | ||
- | <code> | + | |
- | <?php | + | |
- | $fp = fsockopen('192.168.0.81', 80, $errno, $errstr, 2); | + | |
- | if (!$fp) { | + | |
- | echo "$errstr ($errno)\n"; | + | |
- | } else { | + | |
- | $out = "PURGE /hello.php HTTP/1.0\r\n" | + | |
- | . "Host: www.example.com\r\n" | + | |
- | //. "Authorization: Basic ".base64_encode("userid:password")."\r\n" | + | |
- | . "Connection: Close\r\n\r\n"; | + | |
- | fwrite($fp, $out); | + | |
- | echo $out; | + | |
- | while (!feof($fp)) { | + | |
- | echo fgets($fp, 128); | + | |
- | } | + | |
- | fclose($fp); | + | |
- | } | + | |
- | ?> | + | |
- | </code> | + | |
- | + | ||
- | **Note:** | + | |
- | - We are using internal IP address 192.168.0.80 for illustration purposes only. In a real world application, make sure that vhost listens on 192.168.0.80 for domain name [[http://example.com]]. | + | |
- | - Authentication can be added to make the PURGE more secure. Comments in the script simplify the process. | + | |
- | + | ||
- | + | ||
- | ==== Set up Rewrite Rules to Allow PURGE ==== | + | |
- | + | ||
- | put the following rules in .htaccess | + | |
- | + | ||
- | RewriteEngine On | + | |
- | RewriteCond %{REQUEST_METHOD} ^HEAD|GET|PURGE$ | + | |
- | RewriteCond %{REQUEST_URI} !^/purge\.php$ | + | |
- | RewriteRule .* - [E=Cache-Control:max-age=120,L] | + | |
- | + | ||
- | **Note:** PURGE needs to be in the allowed method. | + | |
- | + | ||
- | === Whitelist source IP to issue PURGE request ==== | + | |
- | + | ||
- | Admin Console => Configuration => Server => Security => Allow List | + | |
- | + | ||
- | append Source_IP with tailing 'T' for trusted IP like 'ALL, 192.168.0.81T' | + | |
- | + | ||
- | + | ||
- | + | ||
- | ===== Operations ===== | + | |
- | + | ||
- | + | ||
- | ==== 1. Create Cache ==== | + | |
- | + | ||
- | 1.1 point browser to [[http://www.example.com/hello.php]] | + | |
- | + | ||
- | 1.2 cache storage has a new file created for hello.php (for illustration purposes, we cleaned cache storage in our lab prior to step 1). | + | |
- | <file> | + | |
- | [root@cptest diskcache]# ls -lrt */*/* | + | |
- | 9/c/6: | + | |
- | total 12 | + | |
- | -rw------- 1 nobody nobody 11638 May 2 15:42 9c6eae83978ecd87 | + | |
- | + | ||
- | [root@cptest diskcache]# | + | |
- | </file> | + | |
- | + | ||
- | ==== 2. Request the same resource from cache ==== | + | |
- | + | ||
- | request http://www.example.com/hello.php again from browser. receive 'X-Litespeed-Cache: hit' response header as a prove | + | |
- | <file> | + | |
- | Date: Wed, 02 May 2012 23:59:53 GMT | + | |
- | Content-Encoding: gzip | + | |
- | X-Litespeed-Cache: hit <=== here it is | + | |
- | Connection: Keep-Alive | + | |
- | Content-Length: 10 | + | |
- | Server: LiteSpeed | + | |
- | Vary: Accept-Encoding | + | |
- | Content-Type: text/html | + | |
- | Keep-Alive: timeout=5, max=100 | + | |
- | </file> | + | |
- | + | ||
- | + | ||
- | + | ||
- | ==== 3. Issue purge request from server ==== | + | |
- | + | ||
- | 3.1 1st time, '200 Purged' status returned. | + | |
- | <file> | + | |
- | [test@test ~]$ php purge.php | + | |
- | PURGE /hello.php HTTP/1.0 | + | |
- | Host: www.example.com | + | |
- | Connection: Close | + | |
- | + | ||
- | HTTP/1.0 200 Purged | + | |
- | Date: Wed, 02 May 2012 23:48:23 GMT | + | |
- | Server: LiteSpeed | + | |
- | Connection: close | + | |
- | + | ||
- | [test@test ~]$ | + | |
- | </file> | + | |
- | + | ||
- | **Note:** 'HTTP/1.0 200 Purged' indicates the resource is purged. | + | |
- | + | ||
- | Rewrite Log shown | + | |
- | <file> | + | |
- | 2012-05-02 15:43:20.280 [INFO] [192.168.0.81:60174-0#APVH_lstest.com] [REWRITE] strip base: '/' from URI: '/phpinfo.php' | + | |
- | 2012-05-02 15:43:20.280 [INFO] [192.168.0.81:60174-0#APVH_lstest.com] [REWRITE] Rule: Match 'phpinfo.php' with pattern '.*', result: | + | |
- | 1 | + | |
- | 2012-05-02 15:43:20.280 [INFO] [192.168.0.81:60174-0#APVH_lstest.com] [REWRITE] Cond: Match 'PURGE' with pattern '^HEAD|GET|PURGE$', | + | |
- | result: 1 | + | |
- | 2012-05-02 15:43:20.280 [INFO] [192.168.0.81:60174-0#APVH_lstest.com] [REWRITE] Cond: Match '/phpinfo.php' with pattern '^/purge\.php | + | |
- | $', result: -1 | + | |
- | 2012-05-02 15:43:20.280 [INFO] [192.168.0.81:60174-0#APVH_lstest.com] [REWRITE] apply cache-control: 'max-age=120'. | + | |
- | 2012-05-02 15:43:20.280 [INFO] [192.168.0.81:60174-0#APVH_lstest.com] [REWRITE] No substition | + | |
- | 2012-05-02 15:43:20.280 [INFO] [192.168.0.81:60174-0#APVH_lstest.com] [REWRITE] Last Rule, stop! | + | |
- | 2012-05-02 15:43:20.281 [NOTICE] [192.168.0.81:60174-0#APVH_lstest.com:cache] [PUBLIC CACHE] PURGE /phpinfo.php, result: 1 | + | |
- | 2012-05-02 15:43:20.281 [DEBUG] [192.168.0.81:60174-0#APVH_lstest.com:cache] HttpConnection::sendHttpError(),code=200 Purged | + | |
- | + | ||
- | ... | + | |
- | + | ||
- | </file> | + | |
- | + | ||
- | 3.2 2nd purge request results in 405 error | + | |
- | + | ||
- | <file> | + | |
- | [test@test ~]$ php purge.php | + | |
- | PURGE /hello.php HTTP/1.0 | + | |
- | Host: www.lstest.com | + | |
- | Connection: Close | + | |
- | + | ||
- | HTTP/1.0 405 Method Not Allowed | + | |
- | Date: Wed, 02 May 2012 23:37:44 GMT | + | |
- | Server: LiteSpeed | + | |
- | Connection: close | + | |
- | Cache-Control: private, no-cache, max-age=0 | + | |
- | Pragma: no-cache | + | |
- | Content-Type: text/html | + | |
- | Content-Length: 383 | + | |
- | + | ||
- | [test@test ~]$ | + | |
- | </file> | + | |
- | + | ||
- | Rewrite Log shown | + | |
- | <file> | + | |
- | 2012-05-02 15:43:39.588 [NOTICE] [192.168.0.81:60175-0#APVH_lstest.com] Content len: 0, Request line: 'PURGE /phpinfo.php HTTP/1.1' | + | |
- | 2012-05-02 15:43:39.588 [DEBUG] [192.168.0.81:60175-0#APVH_lstest.com] Find context with URI: [/], location: [/home/lstestc/public_html/] | + | |
- | ... | + | |
- | 2012-05-02 15:43:39.588 [INFO] [192.168.0.81:60175-0#APVH_lstest.com] [REWRITE] strip base: '/' from URI: '/phpinfo.php' | + | |
- | 2012-05-02 15:43:39.588 [INFO] [192.168.0.81:60175-0#APVH_lstest.com] [REWRITE] Rule: Match 'phpinfo.php' with pattern '.*', result: 1 | + | |
- | 2012-05-02 15:43:39.588 [INFO] [192.168.0.81:60175-0#APVH_lstest.com] [REWRITE] Cond: Match 'PURGE' with pattern '^HEAD|GET|PURGE$', result: 1 | + | |
- | 2012-05-02 15:43:39.588 [INFO] [192.168.0.81:60175-0#APVH_lstest.com] [REWRITE] Cond: Match '/phpinfo.php' with pattern '^/purge\.php$', result: -1 | + | |
- | 2012-05-02 15:43:39.588 [INFO] [192.168.0.81:60175-0#APVH_lstest.com] [REWRITE] apply cache-control: 'max-age=120'. | + | |
- | 2012-05-02 15:43:39.588 [INFO] [192.168.0.81:60175-0#APVH_lstest.com] [REWRITE] No substition | + | |
- | 2012-05-02 15:43:39.588 [INFO] [192.168.0.81:60175-0#APVH_lstest.com] [REWRITE] Last Rule, stop! | + | |
- | 2012-05-02 15:43:39.588 [DEBUG] [192.168.0.81:60175-0#APVH_lstest.com] HttpConnection::sendHttpError(),code=405 Method Not Allowed | + | |
- | 2012-05-02 15:43:39.588 [DEBUG] [192.168.0.81:60175-0#APVH_lstest.com] redirect to: | + | |
- | URI=[/405.shtml], | + | |
- | QueryString=[] | + | |
- | </file> | + | |
- | + | ||
- | ==== 4. Verify cache is purged ==== | + | |
- | + | ||
- | 4.1 check cache file -- gone | + | |
- | <file> | + | |
- | [test@test ~]$ ls -lrt */*/* | + | |
- | + | ||
- | 9/c/6: | + | |
- | total 0 | + | |
- | [test@test ~]$ | + | |
- | </file> | + | |
- | + | ||
- | 4.2 request resource 3rd time from browser, *no* 'X-Litespeed-Cache: hit' response header received. | + | |
- | <file> | + | |
- | Date: Wed, 02 May 2012 23:42:18 GMT | + | |
- | Content-Encoding: gzip | + | |
- | Transfer-Encoding: Identity | + | |
- | Connection: close | + | |
- | Server: LiteSpeed | + | |
- | Vary: Accept-Encoding | + | |
- | Content-Type: text/html | + | |
- | </file> | + |