Lightning speed WordPress with Lighttpd and Supercache, part II
Posted by Giovanni Intini | Filed under lighttpd, Lua, Wordpress
There was an error in the code I wrote for my previous post about lighttpd and wp-supercache. If you kept GZip disabled in you wp-supercache configuration, and your browser sent an Accepts gzip header, lightpress would serve the dynamic page (instead of the cached html page).
I did some refactoring and testing, and here’s the current version of rewrite.lua. This one will serve the correct gzipped or text content, while solving another bug with urls ending in ”/”:
function serve_html(cached_page) if (lighty.stat(cached_page)) then lighty.env["physical.path"] = cached_page print("Serving cached page: " .. cached_page) return true else return false end end function serve_gzip(cached_page) if (lighty.stat(cached_page .. ".gz")) then lighty.header["Content-Encoding"] = "gzip" lighty.header["Content-Type"] = "" lighty.env["physical.path"] = cached_page .. ".gz" print("Serving gzipped page: " .. cached_page .. ".gz") return true else return false end end attr = lighty.stat(lighty.env["physical.path"]) if (not attr) then lighty.env["uri.path"] = "/index.php" lighty.env["physical.rel-path"] = lighty.env["uri.path"] lighty.env["physical.path"] = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"] query_condition = not (lighty.env["uri.query"] and string.find(lighty.env["uri.query"], ".*s=.*")) user_cookie = lighty.request["Cookie"] or "no_cookie_here" cookie_condition = not (string.find(user_cookie, ".*comment_author.*") or string.find(user_cookie, ".*wordpress.*") or string.find(user_cookie, ".*wp-postpass_.*")) if (query_condition and cookie_condition) then accept_encoding = lighty.request["Accept-Encoding"] or "no_acceptance" cached_page = lighty.env["physical.doc-root"] .. "/wp-content/cache/supercache/" .. lighty.request["Host"] .. lighty.env["request.uri"] .. "/index.html" cached_page = string.gsub(cached_page, "//", "/") if (string.find(accept_encoding, "gzip")) then if not serve_gzip(cached_page) then serve_html(cached_page) end else serve_html(cached_page) end end end
May 5th, 2008 at 11:17 am
[...] Update: there are some bugs with this code. You can find the newest (and best) version here [...]
May 13th, 2008 at 11:40 am
I will try your sollution but tell me on which version of Lighttpd did you try it? And what about the rewrite rules for WP-SuperCache like this from point 7: http://wordpress.org/extend/plugins/wp-super-cache/installation/ ?
May 15th, 2008 at 11:57 am
I’m using lighttpd 1.4.18 on ubuntu. The rewrite rules on the installation doc are for apache. I ported the to lua for mod_magnet (lighttpd).
May 20th, 2008 at 9:19 am
And what about changing the wp-super-cache.php files to support the lighttpd configuration without apache and his .htaccess files?
May 20th, 2008 at 2:06 pm
You mean hacking wp supercache so it supports lighty? I will contact the author to see if we can arrange it, meanwhile this approach works flawlessly.
June 29th, 2008 at 2:17 am
[...] I’ve been looking for a new theme for a long time, because I needed a wider content column, and I’ve also implemented the superfast lighttpd + wp-supercache setup I described in a previous post. [...]
September 13th, 2008 at 3:37 am
I’m trying to use this solution but even when the plugin does save a cache file within /cache dir the comment on the files doesn’t display the msg: “” so I guess it isn’t working.
I copied your rewrite.lua and nice permalinks are working, so WP it totally using it.
September 15th, 2008 at 4:36 am
update: it works, it was a problem with permissions.
September 15th, 2008 at 2:33 pm
Avena, sorry I didn’t read you comment earlier, but I’m glad you made it work
November 13th, 2008 at 11:53 pm
[...] Danach habe ich das Plugin Supercache eingespielt. Hilfreich dabei war dieses Snippet von A Tempest of Thougts. [...]
December 9th, 2008 at 7:17 pm
Does this work for lighttpd 1.5?
December 10th, 2008 at 12:03 am
I used it on 1.4.18 if you try and it works please let me know.