Apache2.2使用FastCGI模块方法

Apache2.2使用FastCGI模块方法

最新版的 php 5.3.4 已经默认启用 fastcgi ,此前已写过《Linux 从源码编译安装 PHP 5.3.4》,但是对于 Apache2.2 又该如何与 php 5.3.4 ( FastCGI 模式运行 )相结合呢?

目前我所知在Linux中,Apache2.2 要运行 php 脚本,有两中方法,一是使用mod_php 模块方式,另外一种就是使用FastCGI模块的的方式。

一、编译与安装 FastCGI 模块

1
2
3
4
5
6
wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
tar -zxf mod_fastcgi-2.4.6.tar.gz
cd mod_fastcgi-2.4.6
cp Makefile.AP2 Makefile
make top_dir=/usr/local/apache
make install top_dir=/usr/local/apache

二、编辑 Apache2.2 配置文件

2.1、载入FastCGI模块

1
vim /usr/local/apache/conf/httpd.conf
1
LoadModule fastcgi_module modules/mod_fastcgi.so

2.2、设置php文件后缀及解析器

查找并在 "IfModule mime_module" 内添加下面代码

1
2
3
4
5
<IfModule mime_module>
AddHandler php-fastcgi .php 
Action php-fastcgi /fcgi-bin/php-fpm
ScriptAlias /fcgi-bin/ /var/fcgi-bin/
</IfModule>

2.3、添加FastCGIExternalServer及目录属性

1
2
3
<IfModule fastcgi_module>
    FastCGIExternalServer /var/fcgi-bin/php-fpm -host 127.0.0.1:9000
</IfModule>
1
2
3
4
5
<Directory "/var/fcgi-bin/">
Options none
Order allow,deny
Allow from all
</Directory>

三、作用原理

1、首先对 .php 后缀的文件使用 php-fastcgi (可随便起名)解析器。
2、然后发现php-fastcgi不是内置的解析器。
3、于是使用 action 指令定义该解析器,它实际上是 /var/php-fastcgi/ 目录下的一个叫 php-fpm 虚拟的文件。
4、但是 apache 并不知道 /var/php-fastcgi/ 目录下的文件是需要执行的,必须用 ScriptAlias 定义个别名 /fcgi-bin/ 他实际指向/var/fcgi-bin/。(根据上文,ScriptAlias 别名内的文件会被执行,所以上面的action只能为 /fcgi-bin/php-fpm 而不能/var/fcgi-bin/php-fpm)
5、最后哪个虚拟文件其实就是127.0.0.1:9000了(必须全路径,不能使用/fcgi-bin/php-fpm)

http://wangyan.org/blog/apache-fastcgi-module.html



apache中配置php支持模块模式、cgi模式和fastcgi模式的实验

首先安装apache、mysql和php,依次顺序安装。

 

1.apache、mysql的安装比较简单,略过

 

2. php的安装,我安装的是php5.3.6内置了php-fpm,所以不需要再单独下补丁了。

./configure –prefix=/usr/local/php5 /
--with-mysql=/usr/local/mysql /
--enable-fpm
--with-apxs2=/usr/local/apache/bin/apxs
 

注意:

--enable-fastcgi

--enable-force-cgi-redirect

这2个php新版本已经内置支持,所以如果加上这2个参数,make完毕会提示这2个参数找不到。所以不需要加这2个参数了。 

 

--with-apxs2

这个参数看到有的文章说需要fastcgi模式的话,就不能配置这个,其实也不完全是这样,这个参数的用途只不过是把php的解释模块编译成so文件添加到apache的modules中,并且自动添加到conf文件。如果我们不想用模块模式的话,在httpd.conf中把:

LoadModule php5_module modules/libphp5.so

这行注释掉就可以了。

 

3.mod_fastcgi的安装

#wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz

# tar -zxvf mod_fastcgi-2.4.6.tar.gz

# cd mod_fastcgi-2.4.6

# cp Makefile.AP2 Makefile

# vim Makefile 将Makefile中的路径改成你的apache的安装路径

# make install 安装成功

安装成功后,会自动把mod_fastcgi.so复制到/usr/local/apache/modules目录  

 

接下来是如何配置这4种模式:

1.模块模式

这种模式最简单,在http.conf中增加

LoadModule php5_module modules/libphp5.so

即可。然后在

<IfModule mime_module>

AddType application/x-httpd-php .php
AddType applicaiton/x-httpd-php-source .phps

 

2.CGI模式

这种模式需要注释掉

LoadModule php5_module modules/libphp5.so 这行。如果不注释这行会一直走到handler模式。也就是模块模式。

然后在httpd.conf增加action:

Action application/x-httpd-php /cgi-bin/php-cgi

如果在/cgi-bin/目录找不到php-cgi.可自行从php的bin里面cp一个。

然后重启apache,再打开测试页面发现Server API变成:CGI/FastCGI。说明成功切换为cgi模式。

 

3.FastCgi模式,用apche内置进程管理器

首先要添加fastcgi模块到httpd.conf配置文件:

LoadModule fastcgi_module modules/mod_fastcgi.so

 这种模式注释不注释LoadModule php5_module modules/libphp5.so这行貌似没什么关系,只要配置了以下模块

<IfModule fastcgi_module>
   FastCgiServer /usr/local/apache/cgi-bin/php-cgi -processes 20
   AddType application/x-httpd-php .php

   AddHandler php-fastcgi .php

   Action php-fastcgi /cgi-bin/php-cgi
</IfModule>

就会自动走到fastcgi模式。

然后重启apache,这个时候用 ps aux|grep php就会发现有很多php-cgi进程在运行。说明配置生效

 

 

 

 

4.FastCgi模式,用php-fpm进程管理器

首先要添加fastcgi模块到httpd.conf配置文件:

LoadModule fastcgi_module modules/mod_fastcgi.so

接着修改配置文件成:

<IfModule fastcgi_module>
   FastCgiExternalServer /usr/local/apache/cgi-bin/php-cgi -host 127.0.0.1:9000

   AddType application/x-httpd-php .php

   AddHandler php-fastcgi .php

   Action php-fastcgi /cgi-bin/php-cgi
</IfModule>

 

注意,127.0.0.1:9000是php-fpm的开启端口,所以我们还需要把php-fpm打开。

我电脑的位置是.

>>>/usr/local/php5/sbin/php-fpm

 

打开后再ps aux|grep php

会发现很多php-fpm的进程:

root      7002  0.4  1.5  13060  1912 ?        Ss   15:20   0:00 php-fpm: master process (/usr/local/php5/etc/php-fpm.conf)
nobody    7003  0.0  1.3  13052  1656 ?        S    15:20   0:00 php-fpm: pool www
nobody    7004  0.0  1.3  13052  1660 ?        S    15:20   0:00 php-fpm: pool www
nobody    7005  0.0  1.3  13052  1660 ?        S    15:20   0:00 php-fpm: pool www
nobody    7006  0.0  1.3  13052  1660 ?        S    15:20   0:00 php-fpm: pool www
nobody    7007  0.0  1.3  13052  1660 ?        S    15:20   0:00 php-fpm: pool www
nobody    7008  0.0  1.3  13052  1660 ?        S    15:20   0:00 php-fpm: pool www
nobody    7009  0.0  1.3  13052  1660 ?        S    15:20   0:00 php-fpm: pool www
nobody    7010  0.0  1.3  13052  1660 ?        S    15:20   0:00 php-fpm: pool www
nobody    7011  0.0  1.3  13052  1660 ?        S    15:20   0:00 php-fpm: pool www
nobody    7012  0.0  1.3  13052  1668 ?        S    15:20   0:00 php-fpm: pool www
nobody    7013  0.0  1.3  13052  1672 ?        S    15:20   0:00 php-fpm: pool www
nobody    7014  0.0  1.3  13052  1672 ?        S    15:20   0:00 php-fpm: pool www
nobody    7015  0.0  1.3  13052  1672 ?        S    15:20   0:00 php-fpm: pool www
nobody    7016  0.0  1.3  13052  1672 ?        S    15:20   0:00 php-fpm: pool www
nobody    7017  0.0  1.3  13052  1672 ?        S    15:20   0:00 php-fpm: pool www
nobody    7018  0.0  1.3  13052  1672 ?        S    15:20   0:00 php-fpm: pool www
nobody    7019  0.0  1.3  13052  1672 ?        S    15:20   0:00 php-fpm: pool www
nobody    7020  0.0  1.3  13052  1676 ?        S    15:20   0:00 php-fpm: pool www
nobody    7021  0.0  1.3  13052  1672 ?        S    15:20   0:00 php-fpm: pool www
nobody    7022  0.0  1.3  13052  1676 ?        S    15:20   0:00 php-fpm: pool www

 

再测试下访问没问题,大功搞成咯。

http://www.cnblogs.com/fangbo/archive/2011/12/02/2272400.html

你可能感兴趣的:(Apache2.2使用FastCGI模块方法)