这应该算是老掉牙的技术了,但是就是这老掉牙的技术,今天却折腾了我几个小时。
首先是到网络找一些文档,因为转来转去的原因(我痛恨一切不自己产生内容,却到处抓取内容还不完整的网站),基本上只有几篇比较完整的配置文档,无一例外,都是采取源代码编译,编译php,编译mysql,编译nginx,编译memcache,编译eaccelerator,编译everthing。
似乎只有这样才是王道,才是问题的解决版本。
我讨厌编译,我只需要配置。我如果跳过编译,只看配置,在我的系统上就会出现无法解析php的情况。
最好的文档还是官方文档,仔细看了看官方文档,不用编译还是能解决我的问题的。以下是我的配置过程流水帐。 系统是CentOS 5.4。默认的仓库没有nginx,php的版本还在5.0.x上。
需要更新。我就整合在一个文件里(·/etc/yum.repos.d/extra.rep·)
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 5 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch/debug
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-5&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 5 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/5/SRPMS
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-5&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1
现在使用yum开始升级你的系统,安装你需要的nginx,还有安装spawn-fcgi包吧。
为了便于软件的升级,我们尽可能不改动软件默认的配置,尽可能设置自己的配置文件。
首先在/etc/nginx/目录下创建fcgi.conf文件,内容如下:
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
从虚拟主机的角度考虑,我们在/etc/nginx/conf.d/目录下创建virtual.conf文件,内容如下:
server {
listen 80;
server_name www.foo.com foo.com
root /your/webroot/path/;
location / {
root /your/webroot/path/;
index index.shtml index.html index.php;
}
location ~ \.php$ {
include /etc/nginx/fcgi.conf;
}
}
里要主机针对每一个虚拟主机要增加一个SCRIPT_FILENAME的参数,使用绝对路径设置脚本的位置,这里我尝试了网络上传说的$document_root参数,无论怎么设置,均不凑效。
Update 2010-09-14:
如果想要$document_root这个参数生效,就必须在server指令段里指定root参数。否则$document_root不生效。
这样设置后,包括网络上流传的修改php.ini文件都不需要做了。
如果这里有一个通用参数的话,那么就可以把这张包行到fcgi.conf文件里,这样每一个虚拟主机的配置就只要include fcgi.conf就可以了。嗯,应该有这样的参数,只是我暂时还没有找到。
然后,增加一个/etc/init.d/fastcgi-php的起停脚本,如下:
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/fastcig-php could not be found
根据你的需要可以调整最上面的参数,其中注意SERVER_SPAWN和SERVER_CHILDS参数,他们分别用来设置spawn进程和fork进程的个数。启动时总的进程个数等于
(SERVER_SPAWN + 1) * SERVER\_CHILDS。
上面的例子表示启动php-cgi进程9*3=27个。
最后做一些扫尾的工作:
#chkconfig --add fastcgi-php
#chkconfig fastcgi-php on
#chkconfig nginx on
#chkconfig mysqld on
#service mysqld start
#service fastcgi-php start
#service nginx start
好了,可以写的测试脚本了,看看html是否可以解析,php是否可以解析。
上面的配置方法,不需要修改网络上盛传的php.ini文件,fastcgi_params文件等。而且可以利用yum直接升级这些软件包,而不是每次下载源代码不停的./configure;make;make install。那是一个痛苦的过程。