As of 4.1.12, LSWS supports cache PURGE operation to accommodate the demand on cache manipulation.
Here are the steps to PURGE cache:
<?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);
}
?>
Note:
We use internal IP address 192.168.0.80 for illustration purpose. In real world, make sure vhost listens on 192.168.0.80 for domain name
www.example.com.
Authentication can be added to make the PURGE more secure. It is commented that out in the script to simplify the process.
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.
Admin Console ⇒ Configuration ⇒ Server ⇒ Security ⇒ Allow List
append Source_IP with tailing ‘T’ for trusted IP like ‘ALL, 192.168.0.81T’
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, we clean cache storage in our lab prior to step 1).
[root@cptest diskcache]# ls -lrt */*/*
9/c/6:
total 12
-rw------- 1 nobody nobody 11638 May 2 15:42 9c6eae83978ecd87
[root@cptest diskcache]#
request http://www.example.com/hello.php again from browser. receive 'X-Litespeed-Cache: hit' response header as a prove
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
3.1 1st time, ‘200 Purged’ status returned.
[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 ~]$
Note: ‘HTTP/1.0 200 Purged’ indicates the resource is purged.
Rewrite Log shown
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
...
3.2 2nd purge request results in 405 error
[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 ~]$
Rewrite Log shown
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=[]
4.1 check cache file – gone
[test@test ~]$ ls -lrt */*/*
9/c/6:
total 0
[test@test ~]$
4.2 request resource 3rd time from browser, *no* ‘X-Litespeed-Cache: hit’ response header received.
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