Linux|系统管理|WEB开发

关注Linux,系统管理,WEB开发以及开源世界

配置nginx

| Comments

这应该算是老掉牙的技术了,但是就是这老掉牙的技术,今天却折腾了我几个小时。

首先是到网络找一些文档,因为转来转去的原因(我痛恨一切不自己产生内容,却到处抓取内容还不完整的网站),基本上只有几篇比较完整的配置文档,无一例外,都是采取源代码编译,编译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_SPAWNSERVER_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。那是一个痛苦的过程。

Comments