Pages

Monday, 28 November 2011

Apache2.2使用FastCGI模块来运行 php 脚本

在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)

No comments:

Post a Comment