N天前研究了一下使用LEMH在廉价OpenVZ上建立性能优良的网站(事实证明服务器性能也挺优良的),但是发现一直以来Nginx对WordPress的固定链接选项都不太友好(Nginx官网还有一篇文章专门批斗Apache的低效),同时WP Super Cache似乎也不兼容Nginx。

就是这个原因让我甚至放弃了LEAMP,由于之前一直用bbPress,一直没能成功地写出rewrite rule,只能用LAMP+前台nginx反代来解决。(不过我现在已经不用bbPress转投Discourse了)

搭建HHVM网站使用Nginx或Apache,这里主要说前者如何处理WordPress的Rewrite Rule(后者不用说了)
首先在网站根目录下新建rewrite.conf配置文件(随便叫什么,后面要用)

# WP Super Cache rewrite规则

set $cache_uri $request_uri;

# POST、含query string的直接交给PHP
if ($request_method = POST) {
        set $cache_uri 'null cache';
}

if ($query_string != "") {
        set $cache_uri 'null cache';
}   

# 以下内容不缓存
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
        set $cache_uri 'null cache';
}   

#已知用户不缓存
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
        set $cache_uri 'null cache';
}
#有缓存就用缓存,没缓存直接交给WordPress
location ~/ {
        try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args ;
}    

保存后进入Nginx配置文件,找到自己网站的配置文件,在server内include刚刚创建的配置文件,注意目录要写完整

server {
     ....
     root /var/www/html; #这是我的网站目录
     include /var/www/html/rewrite.conf; #rewrite.conf的目录
     ....
}

然后执行nginx -s reload即可。