在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