Litespeed cache + vB + vBSEO conflicts/issues ?

Discussion in 'LiteSpeed Cache' started by eva2000, Jan 31, 2011.

  1. eva2000

    eva2000 Member

    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.

    [​IMG]

    Header for vBSEO disabled with varnish plugin enabled

    [​IMG]

    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 ?

    [​IMG]

    Header when vBSEO enabled with Varnish plugin enabled

    [​IMG]

    litespeed htaccess might need additional for guests caching somewhere ?

    Code:
    RewriteCond %{HTTP_COOKIE} vbseo_loggedin=deleted
  2. eva2000

    eva2000 Member

    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]
    
  3. mistwang

    mistwang LiteSpeed Staff

    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.
  4. NiteWave

    NiteWave Administrator

    I overlooked this post... so following may works:
  5. eva2000

    eva2000 Member

    Thanks i think this is same as the code you set me last time (that didn't work right). Will test this again :)
  6. NiteWave

    NiteWave Administrator

    there is only 1 but important difference:

    RewriteCond %{HTTP_COOKIE} vbseo_loggedin=deleted
    changed to
    RewriteCond %{HTTP_COOKIE} !vbseo_loggedin
  7. bhanuprasad1981

    bhanuprasad1981 New Member

    hi eva have you really got any working .htaccess for vbseo+litespeed combination?
  8. eva2000

    eva2000 Member

    not yet, been a bit busy lately but will get back to testing soon

    Thanks .. will try later on... been a bit busy :eek:
  9. mistwang

    mistwang LiteSpeed Staff

    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] 
    
  10. bhanuprasad1981

    bhanuprasad1981 New Member

    so these rules should be added along with vbseo normal rules ?
  11. mistwang

    mistwang LiteSpeed Staff

    Yes, that's correct.
  12. dihuta

    dihuta Member

    Hi eva2000,

    Does it works now?
    Thanks!
  13. Clockwork

    Clockwork Member

    We have some custom scripts running, what folders & scripts should we add here?
  14. webizen

    webizen New Member

    These rewrite rules are in .htaccess at the top level vB directory.
  15. Clockwork

    Clockwork Member

    I'm receiving an

    with mistwang's htaccess
  16. webizen

    webizen New Member

    Try with "ORG_REQ_URI" instead. %

  17. eva2000

    eva2000 Member

  18. Clockwork

    Clockwork Member

    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: Feb 28, 2011
  19. webizen

    webizen New Member

    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.
  20. Clockwork

    Clockwork Member

    yes

    I'll do.

Share This Page