Run Nginx + PHP on Mac
标题是给搜索引擎看的。这是篇纯技术文章,记录下这两天都在忙些什么。
前天想跑phpsecinfo,结果报fastcgi出错,我怀疑是lighttpd的问题,于是自然想到装一下nginx。
要在nginx上跑php,首先需要启动fastcgi,方法有三种,一是用php自带的fastcgi server,二是用lighttpd带的spawn-fcgi,三是用php-fpm。当然最好的是php-fpm,原因请见这里
我首先尝试用spawn-fcgi,我敲的命令是
spawn-fcgi -a 127.0.0.1 -p 10005 -f /opt/local/bin/php-cgi
结果报错:
spawn-fcgi.c.127: bind failed: Can’t assign requested address
搜遍google,都没有谁遇到过这个问题,反复看了各种说明,都没有人提到说这行代码有错误,难道我是地球上第一个遇到的人吗?报错信息说是spawn-fcgi.c的127行,深入到lighttpd的源代码,C写的,出错的这行是在做bind,但我也不会改。。。。
无奈之下去只能转向使用php-fpm,不过也没成功(后面详细叙述),于是又转回来捣腾spawn-fcgi。连上IRC的lighttpd组,描述了问题,老外果然很强,不一会儿就给了个修订版,一看日期,刚刚改的,再一看id,是lighttpd的developer,效率真是高,敬仰敬仰。下载补丁,覆盖spawn-fcgi.c这个文件,编译后,就好了。
故事到上面其实也就结束了,这里再说下前面提到的尝试使用php-fpm。php-fpm本身是一个php的patch,按照其文档操作是不难的。麻烦的地方是我用的是macports安装软件包,好处是方便懒人,比如我,坏处是如果需要定义一些自己的参数,就让菜鸟很头大,比如还是我。看了下macports的文档,大致上是这样做的:首先修改你需要定制的软件包的portfile,路径是在/opt/local/var/macports/sources/rsync.macports.org/release/ports/ 要注意的是php5是在其中的www目录里面,别找不着了。怎么改就看文档吧。按照patch部分的文档操作,patch是打进去了,但是出了一大堆错误,一般这个时候我就挂了,这次也不例外。
然后跑步时间到了,我就去跑步了。路上我想到一个忽悠macports的方法:首先按照php-fpm的文档把patch打好,然后打tar包,覆盖tar包到/opt/local/var/macports/distfiles/php5下,计算tar包的md5,sha1,rm160值(方法),修改portfile中相应的这三个值,这样对于macports来说就不要再打patch了。照此方法做,一开始都非常的正常,但是到了build的时候又出来一大堆错误,我再次被击倒,然后就又回到了spawn-fcgi了。不过这个方法后来用在编译lighttpd的时候,所以也不是完全没有收获。
插叙结束。
好了,一切都准备好了,开始收拾造成这么多麻烦的phpsecinfo了。结果———还是爆了-_-!! 不过已经不重要了。
资料汇总:
张宴写的配置nginx+php的文章:
这篇介绍的是php-fpm:http://blog.s135.com/read.php/366.htm
这篇介绍的是spawn-fcgi:http://blog.s135.com/read.php/314.htm
php-fpm: http://php-fpm.anight.org/index.html
Dbanotes写的为什么php-fpm更好:http://www.dbanotes.net/web/php_fastcgi_phpfpm.html
macports 文档:http://guide.macports.org/
Lighttpd的developer,stbuehler,给的lighttpd的补丁:http://redmine.lighttpd.net/repositories/diff/lighttpd?rev=2348
我之前写的一篇使用macports的入门文章:http://www.machenlei.com/archives/179

最近评论