WordPress的缓冲插件wp-super-cache默认支持apahce的缓冲方式,在生成了静态页面数据后,通过.htaccess的规则直接让apache读取静态文件,完全不经过PHP,可以很大的提高博客的页面性能。 但是Nginx的改写规则就没这么容易让代码来配置了,虽然wp-super-cache的第二种缓存方式就是为这种使用环境设计,但实际上是用了PHP来提供静态数据了,在使用apache benchmark压力的时候,php-cgi依然占很高的CPU占有率。 通过编写nginx的rewrite规则还是可以让nginx直接读取静态文件,参考来自Code Exchange: nginx rewrite rules for WordPress + WP Super Cache,这里的配置被很多地方引用过,但实际尝试使用过程看到那里面的代码还需要微调。 server { listen 80; server_name apt-blog.net; root /var/www/pt-sites/wordpress; index index.html index.htm index.php; location / { # enable search for precompressed files ending in .gz # nginx needs to be complied using –-with-http_gzip_static_module # for this to work, comment out if using [...]
Update: nginx+php的环境可以更快捷的方法完成,参看Nginx + PHP (via php-fpm) on Ubuntu 环境最佳实践 比起传统的LAMP Web服务构架,nginx替换Apache能够在同样硬件配置情况下提高10倍的并发性能;PT尝试在Arch下用nginx简单搭建一个让wordpress运行的LNMP环境的笔记:(实际上nginx+fastcgi的架构在目前看来性能并不高,甚至比apache+mod_cgi差,也许nginx做前端服务,apache做后端处理合适一点[误]) Update:nginx+fastcgi跑服务的组合通常用在一些低端的vps上,其内存甚至不到100M,所以apache等庞物是不适合的。按下文方法启动的fcgi只有一个worker进程,而且nginx配置当中没有fastcgi的缓冲,所以会有性能低下的感觉,其实可以通过PHP_FCGI_CHILDREN环境变量等来进行优化。另外推荐使用这里提到的启动脚本来启动php-cgi。参考一些nginx调优方案,再加上一些Wordpress Cache之类的,一台64M的vps足够跑上一打wordpress博客了。 安装nginx。 nginx在源里面,很简单就安装完成; 1 /etc/rc.d/nginx start 启动nginx的服务,因为有默认的配置,这时用浏览器看看http://localhost,可见到nginx的错误页了,完成; 安装php 安装php也是从源里来的,至于运行php,按arch wiki推荐的方法是使用fcgi,顺便装上,运行: 1 cgi-fcgi -start -connect localhost:9000 /usr/bin/php-cgi nginx的默认目录在/srv/http/nginx,在里面新建一个index.php,包含简单的代码: 1 2 3 <?php phpinfo(); ?> 然后我们要让nginx使用php来解释这个文件,编辑/etc/nginx/conf/nginx.conf 配置nginx的重点就是这个文件,但先不管,在适当的地方贴入这段: location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } 重启一下nginx 1 [...]
最近给我博客提供服务器的朋友把系统升级到新版的CentOS,习惯使用ScribeFire写博客的我遇上麻烦了:在Scribefire里面发布的任何东西格式都一团糟,发布的代码断肢缺臂,所有的HTML标记的尖括号都不翼而飞,原来的<p>就被剥光剩“p”,</p><p></p>的话就当然剩下3p了,不得不进入WordPress的后台编辑器重新修改,如此几天下来,不胜其烦。 于是在网上搜了一个中午,发现国内的形势一片大好,没任何人提到有这样的问题!!!难道是RP?后来想到,国内使用Linux主机的博客寥寥可数,在其中跟潮流使用新发行版的服务器更是少数了……因为这个问题的根源是新版libxml2库引起的! 在这里可以看到不少生活在在水深火热中的西方人有这个问题,里面跟贴留言的人提到,在他的FC9系统里面安装libxml2-2.6.32-1.fc9没有问题,但是一升级到libxml2-2.7.1-1.fc9就不行了!而且这个问题不是最近才有的,可以看到抱怨该问题的帖子从08年10月后就出现了。 关于这个问题,考究过程是相当纠结的: WordPress 知道: XMLRPC api stripping leading angle brackets Php 知道: libxml2 2.7.1 causes breakage with character data in xml_parse() libxml2 知道 Release of libxml2-2.7.1 所有人都知道这个问题,但是距离完全修复还远着,一般用户如果能管理服务器,可以尝试把libxml2降级回2.6.3x,或者重新编译PHP,使用expat来替代libxml2的xml解析器。这两个方法对多数人来说都很不现实。在这些纠结得以解决之前,WordPress的用户一般要双手解决问题,WordPress patch for problamatic libxml2 version提供了修改wp中的三个文件的补丁方法,很明显,问题的根源是因为xml_parse()把我们文章里的HTML标记当成错误符号给吃掉了。不过对很多用户来说这依然不是个好方法,修改代码烦不说,还容易出错。 在这里推荐一般用户安装LibXML2 Fix这个WordPress插件,少快好省地搞定这个问题。当然,插件也提示说使用这个插件只是一个权宜之计,要真正修复这个问题,需要在服务器上把PHP更新到PHP 5.2.9+、libxml2 2.7.3+。
WordPress中使用<!--more-->标签分隔文章在首页和单页中输出的功能很方便,在原编辑器中可以单击分隔按钮添加,但是习惯在Scribefire发文章,却无奈Scribefire没有这样的按钮。 这天无意中发现,Scribefire提供的“添加分割线”功能,虽然插入的是<hr>标签,但是文章发上去后自动转成<!--more-->标签: 仔细看一下,Scribefire插入的是<hr class="jump" />,估计WordPress中有相应机制能完成相应的转换吧。
Page optimized by WP Minify WordPress Plugin