5

在Lighttpd上使用wp-super-cache

Posted by Elias on 五 11, 2009 in 个人网站的工具与思考

wp-super-cache是WordPress的一个静态缓存插件,对访问量大的博客或是在系统中使用了性能较差的插件时都是挺有用的。但这个玩意需要Apache的mod_rewrite来支持,lighty下可没有这玩意儿。所以需要咱们自己添加一个lua脚本,配合lighty的mod_magnet模块来代替mod_rewrite的功能。整个操作步骤是这样的:

lighty中博客站点的配置文件要这么写:

$HTTP["host"] == "blog.elias.cn" {
  server.document-root = "/home/public_html/elias"
  magnet.attract-physical-path-to = ( server.document-root + "/rewrite.lua" )
}

这里能用magnet.attract-physical-path-to的前提是mod_magnet已经安装并启用了,否则在lighty的error.log会报错。Debian里mod_magnet是单独的一个包,叫做lighttpd-mod-magnet,安装以后就可以把mod_magnet加入lighty的配置文件了。

然后再在博客站点的根目录新建一个名为rewrite.lua的脚本文件,文件内容为:

?Download rewrite.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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"]) and lighty.env["physical.path"] ~= lighty.env["physical.doc-root"]
 
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

这个lua脚本源自tempe.stthedomz.com,不过我对其中的第23行做了修改。原始版本永远不会对博客首页启用缓存,因为lua脚本仅在请求的原始地址不存在时才进行重定向操作,但首页也就是博客根目录总是存在的,因此也就永远不会被重定向到静态缓存。我对这一行的修改就是让脚本在请求的地址与站点根目录相同时也启用静态缓存重定向机制。

这样折腾完之后,调整一下站点的Permalink规则,使之不要掉进wp-super-cache的忽略规则里面,应该就可以了。在页面的html源代码最后,应该能够看到super-cache的时间戳。正常工作的wp-super-cache是不会在频繁刷新页面时每次都更新这个时间戳的。附带说一下,我这个博客是没有使用wp-super-cache的,本文提及的内容应用在了blog.laiyonghao.com

标签:,

 
4

转换SimplePhpBlog到WordPress

Posted by Elias on 十 13, 2008 in 个人网站的工具与思考

发现一直使用的SimplePhpBlog的防垃圾评论机制被突破了,与其修改源码改进其图像验证功能,干脆把整个博客迁移到WordPress了,或许这样今后的维护成本还小些。这里的数据迁移用到SimplePHPBlog import utility 网址上提供的Perl脚本工具,我进行了少量修改使之正确支持中文处理。我修改后的脚本可以从以下网址下载:WordPressImport.pl.zip 大致使用方法是:

  1. 首先,这个脚本是有程序版本要求的,SimplePhpBlog 0.4.8左右的版本应该没问题,WordPress则得是2.3.*,版本不对的话脚本会报错。
  2. 先用WordPress程序完成初始安装;
  3. 执行“./WordPressImport.pl -noratings -host localhost -user 数据库用户名 -password -wp_password WordPress的admin密码 -database 数据库名 -import sphpblog的所在目录”,然后按照提示输入数据库访问密码即可。
  4. 如果报错,通常是因为缺少Perl的必要运行库引起的,已知应该会用到Data::Format和DBD::mysql,可以考虑使用cpan安装。
  5. 登陆WordPress后台,检查数据正常之后,可以将WordPress升级到最新版本,并安装喜欢的插件。
  6. 建议安装并激活Word Press里面的bbcode插件,因为我遇到原先SimplePhpBlog中使用的一些编辑语法可能未被完全转换,比如有些url链接仍然是用的bbcode语法。激活bbcode之后移植过来的数据基本上又可以正常显示了。(BBCode 1.0.1版本对标签的解析存在一点Bug,会生成带多余等号的链接地址,参见关于本站页面的说明。
  7. 目前文章中引用站内图片路径都是错的,所以显示不出来。把原先SimplePhpBlog里面images目录整个传到WordPress的“wp_content/uploads”目录下,然后修改并执行以下sql语句来修复站内图片链接:“update wp_posts set post_content = replace(post_content,’src=images/’,'src=http://www.YOURSITE.cn/YOUR_BLOG/wp-content/uploads/images/’)”。于是图片也能正确显示了。这里的写法和WordPress自带的媒体库管理工具一样,使用的是该死的绝对路径,将来修改博客的域名或地址时还得再重新改站内图片路径。
  8. 这样日志、评论、展台都能够被正确移植过来。也许因为我的文章分类信息全是中文,迁移后的文章全部变成没有分类了,可以试着用Word Press的“Batch Categories”插件来批量调整。但我在修改了默认分类的名字之后,Batch Categories就死活搜索不出来已有文章了,最后我手工一个个调整的文章分类。建议尝试一下在导入SimplePhpBlog数据后,在旧版本的WordPress上使用“Batch Categories”试试,如果调整成功了再继续升级WordPress。

Ps:转换完了感觉有一点不满意:友情链接是按字母排序的,恐怕有些兄弟姐妹难免会对排座次有意见。

标签:, ,

Elias的邪异门 is proudly powered by WordPress.(京ICP备10013669号 瑞豪开源提供VPS)Theme design by Laptop Geek.
Copyright © 2018 All rights reserved. Entries (RSS) and Comments (RSS).