归档文章 (2011-2017)

date
2011/01/25
最新版的 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 模块

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模块

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

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

查找并在 “IfModule mime_module” 内添加下面代码
<IfModule mime_module> AddHandler php-fastcgi .php Action php-fastcgi /fcgi-bin/php-fpm ScriptAlias /fcgi-bin/ /var/fcgi-bin/ </IfModule>

2.3、添加FastCGIExternalServer及目录属性

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

三、作用原理

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