Litespeed cache + vB + vBSEO conflicts/issues ?

eva2000

Well-Known Member
#1
Thanks to Mert over at vBSEO, I got a test license installed on local server, from what I can see, this is what is happening. vBulletin varnish xml plugin has extra code to assign custom cookies to members and guests (session prefix + imgloggedin yes) and also code to strip guest visitors of the session id/hash so that varnish will cache guests without cookies. Litespeed cache's .htaccess tries to match these plugin cookies so you're telling litespeed cache to cache php pages where imloggedin=yes isn't set and where userid/password cookie isn't set.

default litespeed cache .htaccess i am using

Code:
RewriteCond %{HTTP_COOKIE} !zzimloggedin=yes
RewriteCond %{HTTP_COOKIE} !zzuserid=
RewriteCond %{HTTP_COOKIE} !zzpassword=
RewriteCond %{REQUEST_METHOD} ^HEAD|GET$
RewriteCond %{QUERY_STRING} !s=[a-fA-F0-9]{32}
RewriteCond %{QUERY_STRING} !product=vbnexus
RewriteCond %{REQUEST_URI} !^(login|register|usercp|private|profile|cron|image)\.php$
RewriteCond %{REQUEST_URI} !^admincp
RewriteRule ^(.*\.php)?$ - [L,E=Cache-Control:max-age=300]
Varnish plugin stripping guests of session id/hash

PHP:
if($vbulletin->userinfo['userid'] <= 0)
{
$vbulletin->session->vars['sessionurl']  = '';
$vbulletin->session->vars['sessionurl_q']  = '';
}
Now what is happening is when vbseo is enabled, it seems to be reintroducing the guest visitors session id/hash into the cookies for guests.

vBSEO Disabled

This is what i see with vbseo disabled, only zzlastactivity and zzlastvisit cookies are set when varnish plugin enabled as it strips sessionid/hash.



Header for vBSEO disabled with varnish plugin enabled



vBSEO Enabled

Now when you enable vbseo, session id/hash for guests is reintroduced along with vbseo_loggedin=yes/deleted for members/guests, which in theory if you used varnish cache (in apache+varnish setup), varnish wouldn't cache the vbseo page as it has cookies vbseo_loggedin so varnish vcl would need adjusting. But it doesn't explain why litespeed cache isn't caching the page other than proper detection of vbseo_loggedin cookie in htaccess ?



Header when vBSEO enabled with Varnish plugin enabled



litespeed htaccess might need additional for guests caching somewhere ?

Code:
RewriteCond %{HTTP_COOKIE} vbseo_loggedin=deleted
 

eva2000

Well-Known Member
#2
NiteWave asked me to try this htaccess for vBSEO + litespeed cache, while it works to allow vBSEO to function, litespeed isn't caching the pages

Code:
# Comment the following line (add '#' at the beginning)
# to disable mod_rewrite functions.
# Please note: you still need to disable the hack in
# the vBSEO control panel to stop url rewrites.
RewriteEngine On

# Some servers require the Rewritebase directive to be
# enabled (remove '#' at the beginning to activate)
# Please note: when enabled, you must include the path
# to your root vB folder (i.e. RewriteBase /forums/)
#RewriteBase /

#RewriteCond %{HTTP_HOST} !^www\.yourdomain\.com
#RewriteRule (.*) http://www.yourdomain.com/forums/$1 [L,R=301]

RewriteRule ^((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$ vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 [L]

RewriteCond %{REQUEST_URI} !(admincp/|modcp/|cron|vbseo_sitemap)
RewriteRule ^((archive/)?(.*\.php(/.*)?))$ vbseo.php [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/(admincp|modcp|clientscript|cpstyles|images)/
RewriteRule ^(.+)$ vbseo.php [QSA]

RewriteCond %{HTTP_COOKIE} vbseo_loggedin=deleted
RewriteCond %{REQUEST_METHOD} ^HEAD|GET$
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) - [L,E=Cache-Control:max-age=120]
 

mistwang

LiteSpeed Staff
#3
The expire time of cookie "vbseo_loggedin" is set to 1 second earlier than the current time, maybe it is intended to remove that cookie, not to send it back to web server as request cookie.

If that is the case, just test if "vbseo_loggedin" presents, if it does, user logged in, no cache, if it does not, cache the page.
 

NiteWave

Administrator
#4
I overlooked this post... so following may works:
# Comment the following line (add '#' at the beginning)
# to disable mod_rewrite functions.
# Please note: you still need to disable the hack in
# the vBSEO control panel to stop url rewrites.
RewriteEngine On

# %Some servers require the Rewritebase directive to be
# enabled (remove '#' at the beginning to activate)
# Please note: when enabled, you must include the path
# to your root vB folder (i.e. RewriteBase /forums/)
#RewriteBase /

#RewriteCond %{HTTP_HOST} !^www\.yourdomain\.com
#RewriteRule (.*) http://www.yourdomain.com/forums/$1 [L,R=301]

RewriteRule ^((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$ vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 [L]

RewriteCond %{REQUEST_URI} !(admincp/|modcp/|cron|vbseo_sitemap)
RewriteRule ^((archive/)?(.*\.php(/.*)?))$ vbseo.php [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/(admincp|modcp|clientscript|cpstyles|images)/
RewriteRule ^(.+)$ vbseo.php [QSA]

RewriteCond %{HTTP_COOKIE} !vbseo_loggedin
RewriteCond %{REQUEST_METHOD} ^HEAD|GET$
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) - [L,E=Cache-Control:max-age=120]
 

NiteWave

Administrator
#6
there is only 1 but important difference:

RewriteCond %{HTTP_COOKIE} vbseo_loggedin=deleted
changed to
RewriteCond %{HTTP_COOKIE} !vbseo_loggedin
 

eva2000

Well-Known Member
#8
not yet, been a bit busy lately but will get back to testing soon

there is only 1 but important difference:

RewriteCond %{HTTP_COOKIE} vbseo_loggedin=deleted
changed to
RewriteCond %{HTTP_COOKIE} !vbseo_loggedin
Thanks .. will try later on... been a bit busy :eek:
 

mistwang

LiteSpeed Staff
#9
Based on my investigation on this, the latest ruleset should work, however, there are a few URLs need to be excluded like "/login/wait", so the cache related rules are
Code:
#%LiteSpeed Cache rules 
RewriteCond %{HTTP_COOKIE} !vbseo_loggedin
RewriteCond %{ORG_REQ_URL} !(login/wait|admincp|(login|register|usercp|private|profile|cron|image)\.php))
RewriteCond %{REQUEST_METHOD} ^HEAD|GET$
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) - [L,E=Cache-Control:max-age=120]
 

Clockwork

Well-Known Member
#18
RewriteCond %{ORG_REQ_URI} !(login/wait|admincp|(login|register|usercp|private|profil e|cron|image)\.php)
that works, however the caching itself doesn't work properly, only one file is created at /tmp/diskcache/a/6/1/a615e441 (shouldn't there be more files?) and the cache only sometimes gets hit and not for any page.
 
Last edited:

webizen

Well-Known Member
#19
Cache file is corresponding to the URL requested. Do you mean you requested multiple URLs and only one cache file got generated? You should enable rewrite logging with loglevel set to 9 and see how the URLs are handled. You can also paste here with the request header and response header (e.g. captured by Firefox LiveHeader) to the URL in question.
 
Top