In order for LSWS Cache and IP Board work together, IP Board needs to be modified to send out a ‘Cache-Control: Private’ response header to logged-in users. LSWS will take care of the rest.
Here are the steps that will enable LSWS to work with IP Board:
File admin/sources/classes/output/formats/html/htmlOutput.php needs to be modified to send out a ‘cache-control: private’ response header to logged-in users. Essentially, the response header is a flag to notify LSWS what kind of cache to serve, which is the only information LSWS needs in order to work with IP Board.
Below changes are for IPB v3.1.4 as an example:
# diff -Naur a/htmlOutput.php b/htmlOutput.php
—-- a/htmlOutput.php 2011-03-16 15:39:09.000000000 -0400
+++ b/htmlOutput.php 2011-06-27 00:39:38.000000000 -0400
@@ -73,6 +73,17 @@
public function printHeader()
{
//—————————————–
+ // Add "cache-control: private" header
+ // for logged in users
+ // this is for LiteSpeed cache requirement
+ //—————————————–
+ if ( $this->memberData['member_id'] )
+ {
+ header( "cache-control: private" );
+ }
+
+
+ //—————————————–
// Start GZIP compression
//—————————————–
@@ -1062,4 +1073,4 @@
return $texts[ array_rand($texts) ];
}
#
Note: To verify, check the response header when you log in. Server response header “Cache-Control: private” should be seen:
HTTP/1.1 200 OK
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked
Date: Wed, 20 Jul 2011 16:59:30 GMT
Server: LiteSpeed
Connection: close
...
Cache-Control: private <==== this is the header
...
In LiteSpeed (v4.1.2 or later) Admin CP → Configuration → Server → Cache
Storage Path: /dev/shm/diskcache
Max Object Size: 1024000
Cache Policy
Enable Cache: No
Cache Expire Time (seconds): Not Set
Cache Request with Query String: No
Cache Request with Cookie: Yes
Cache Response with Cookie: Yes
Ignore Request Cache-Control: Yes
Ignore Response Cache-Control: No
Enable Private Cache: Yes
Private Cache Expire Time (seconds): 60
Do-Not-Cache URL(s):
/index.php?app=forums&module=post§ion=post&do=edit_post
/index.php?app=forums&module=post§ion=post&do=reply_post
/index.php?app=forums&module=moderate§ion=moderate&do=postchoice
Note: Do-Not-Cache URL box holds all of the URL(s) that should NOT be cached.
Input the following rules into .htaccess in front of existing Rewrite rules.
RewriteEngine On
###########################################
# For LiteSpeed public cache (guest user)
###########################################
RewriteCond %{REQUEST_METHOD} ^HEAD|GET$
RewriteCond %{HTTP_COOKIE} !member_id= [OR]
RewriteCond %{HTTP_COOKIE} member_id=0
RewriteCond %{REQUEST_URI} !^/admin
RewriteCond %{REQUEST_URI} !(css|js|png|gif)$
RewriteCond %{QUERY_STRING} ^$
RewriteRule .* – [E=Cache-Control:max-age=360]
Note:
Above rules are for guest user (the cookie does not contain ‘member_id’ at all or contains ‘member_id=0’).
Do NOT cache for admin user.
Do NOT cache static objects.
Do NOT cache
URL with Query String to stay on the safe side.
Cache for 6 minutes.
For public cache, “X-LiteSpeed-Cache: hit” response header should be seen.
For private cache, “X-LiteSpeed-Cache: private,hit” response header should be seen.
0 */2 * * * find /dev/shm/diskcache -type f -mmin 120 –delete
echo "mkdir /dev/shm/diskcache && chmod nobody.lsadm" >> /etc/rc.local
echo "/dev/shm/diskcache && chmod 770 /dev/shm/diskcache" >> /etc/rc.local
Note: this is to make sure cache directory gets created when server is booted up.