从Apache到Lighttpd

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:从Apache到Lighttpd
  • 本文链接:http://zengrong.net/post/1786.htm

从Apache到Lighttpd

购买了阿里云服务器之后,由于内存过小,MySQL经常挂掉挂载了虚拟内存之后,MySQL倒是不挂了,但Apache总是占用过多内存,导致磁盘频繁读取(阿里云服务器的磁盘性能就那就一个弱啊),服务器响应缓慢,甚至远程登录都无法完成,只能通过网页控制台重启服务器。

Google了一堆优化512MB内存服务器的资料,设置后都没什么用处,服务器依然是每天挂2~3次。

别以为我的服务器访问量有多么的大,整个服务器上只放了一个博客程序,IP访问量每天几百次。当然,这个博客程序就是臭名昭著的各大主机商都痛恨的WordPress。

今天下决心把Apache换成Lighttpd,希望能解决内存不够的老大难问题。

以下是从Apache到Lighttpd转换过程中遇到的几个新手小白问题。这不是教程,只是解决方案,因此略去了安装等基本过程。

403 forbidden

问题:

按照 http://wiki.ubuntu.org.cn/Lighttpd 的说明装好Lighttpd并启动之后,在访问php页面的时候,提示403 forbidden,html页面正常。

解决

这个403错误其实是误报,并非没有权限访问php文件,而是没有权限访问php-cgi模块。
Lighttpd安装后,默认只启用了一个mod,就是fastcgi,但没有启用php支持。必须手动启用fastcgi-php模块才支持php访问:

lighty-enable-mod fastcgi-php
service lighttpd force-reload

Ubuntu英文官方Wiki说得很清楚: https://wiki.ubuntu.com/Lighttpd+PHP

启用PHP-FPM

问题

按照上面的方式启用的php运行在fast-cgi模式。如何启用PHP-FPM?

解决

建立 /etc/lighttpd/conf-availeable/10-fastcgi-fpm.conf 文件,写入如下内容:

server.modules += ("mod_fastcgi")
fastcgi.server = ( ".php" =>
  ((
      "host" => "127.0.0.1",
      "port" => "9000"
   ))
)

禁用fastcgi模块和fastcgi的php支持,使用刚才建立的 fastcgi-fpm 模块同时支持两者。

lighty-disable-mod fastcgi
lighty-disable-mod fastcgi-php
lighty-enable-mod fastcgi-fpm
service lighttpd force-reload

查看phpinfo,可以看到已经是FPM支持了:

lighttpd-php-fpm

WordPress的rewrite规则不起作用

问题

WordPress中设定的固定链接不起作用,访问的时候显示404

解决

WordPress启用了固定链接功能后,会自动在网页根目录建立.htaccess文件,并在其中写入rewrite规则。Apache会读取这个规则,从而实现固定链接。

但是Lighttpd并不兼容Apache制订的rewrite规则。因此,需要为WordPress制订Lighttpd能够支持的rewrite规则。

我使用的规则如下:

url.rewrite = (
    "^/(wp-.+).*/?" => "$0",
    "^/(sitemap.xml)" => "$0",
    "^/(xmlrpc.php)" => "$0",
    "^/(.+)/?$" => "/index.php/$1"
)

或者这个:

url.rewrite-final = (
    # Exclude some directories from rewriting
    "^/(wp-admin|wp-includes|wp-content|gallery2)/(.*)" => "$0",
    # Exclude .php files at root from rewriting
    "^/(.*.php)" => "$0",
    # Handle permalinks and feeds
    "^/(.*)$" => "/index.php/$1"
)

参考