成长脚印-专注于互联网发展
【经验】WIN7系统下PHPnow整合fastCGI及Apache的虚拟机配置
post by:天之骄子 2012-11-21 13:10

一、CGI整合问题

对于自行配置的PHP环境,整合CGI前面写过一篇文章,按照步骤修改就可以了。(【经验】Apache2.2+(多版本)PHP的fastCGI的配置

 但很多情况下,为了简便,我们都会用一键集成的环境安装(自行配置步骤比较繁琐,耗费时间,如果想自行配置,见【经验】WIN7系统配置PHP(Apache+Mysql)+JSP(Apache整合Tomcat)运行环境)。

这里我用到的是PHPnow(版本PHPnow-1.5.6)一键集成环境。默认的PHP运行模式是Apache 2.0 Handler,为了提升运行效率,当然得配置fastCGI模式了(原因见如上第一个链接)。

点击查看原图点击查看原图

但如果我们按照上面那篇文章那种常规步骤配置CGI的话会发现,怎么都不会成功!(配置CGI后,php默认配置文件php.ini无法加载)什么原因呢?

点击查看原图

从phpinfo中的Loaded Configuration File E:\PHP\php-5.2.14-Win32\php-apache2handler.ini你终于恍然大悟,原来PHPnow加载的PHP配置文件是php-apache2handler.ini,而fastCGI默认加载的文件名是php.ini所以无论怎么配置,fastCGI始终无法加载php配置文件。


二、CGI整合解决方案

最方便的方式,当然从PHPnow安装包中入手了,把PHP配置文件重新改名为php.ini

 点击查看原图

1、打开PHPnow-1.5.6.zip压缩的安装包,找到Package.7z\Pn目录下的main.php打开,

点击查看原图

找到php_ini = $php_dir.'\php-apache2handler.ini';这句,改成php_ini = $php_dir.'\php.ini';再次安装PHPnow的时候,你“奇迹”的发现PHP配置文件名终于改回成默认的php.ini文件了。

 2、将fastCGI的module文件放进Apache的modules目录下

 点击查看原图

 (当然你也可以等安装完后再放进去)

3、把以上修改的保存到安装包中,然后就像以前一样正常安装了。

4、安装完后,需修改两处,

首先,PHP的php.ini文件

找到extension_dir = "..\..\php-5.2.14-Win32\ext",改为extension_dir = "E:\PHP\php-5.2.14-Win32\ext"

(这个地方很怪,如果是相对路径,Apache和fastCGI无法启动[apache error.log记录错误:mod_fcgid: get overlap result error],所以必须改为绝对路径,自己按照自己的安装情况改哦~)

其次,apache的httpd.conf文件

加入如下内容:

LoadModule fcgid_module modules/mod_fcgid.so
AddHandler fcgid-script .fcgi .php
#php.ini的存放目录
#FcgidInitialEnv PHPRC "E:/PHP/php-5.2.14-Win32/php-apache2handler.ini"
#设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程在处理完所有请求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#php-cgi每个进程的最大请求数
FcgidMaxRequestsPerProcess 1000
#php-cgi最大的进程数
FcgidMaxProcesses 15
#最大执行时间
FcgidIOTimeout 120
FcgidIdleTimeout 120
#php-cgi的路径
FcgidWrapper "E:/PHP/php-5.2.14-Win32/php-cgi.exe" .php
AddType application/x-httpd-php .php
(加载fastCGI模块,同时进行相应配置,同样,php-cgi的路径根据自己安装情况改)

 

然后,把<Directory "../htdocs">内的

Options Indexes FollowSymLinks 改为 Options Indexes FollowSymLinks Includes ExecCGI

(指定该目录下的PHP运行模式)

5、重启Apache,你会看到如下画面:

点击查看原图

CGI-FCGI于是你慨叹一声,终于配置好了啊!

 

三、Apache虚拟机配置

如果你有如下需求:服务器配置多个端口,每个端口指定不同的根目录。那么,接着往下配置吧

1、首先,必须确保

# Virtual hosts
Include conf/extra/httpd-vhosts.conf  加粗的字体前没有#(即没有被注释掉,开启Apache的虚拟机配置)

2、然后加上其他的监听端口(比如8080)

Listen 80
Listen 8080

3、同时打开Apache的虚拟机配置文件httpd-vhosts.confApache-22\conf\extra

把其中的内容替换成如下:

<VirtualHost *:8080>
   ServerAdmin [email protected]
   DocumentRoot E:\PHP
   ServerName *:8080

   <Directory "E:\PHP">
      Options Indexes FollowSymLinks Includes ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
   </Directory>
</VirtualHost>
(配置该虚拟机相关参数,自己指定端口,及端口对应的根目录)

4、重启Apache,你会看到如下画面(为便于你们观察,我在8080端口的根目录下放了一个index.php文件,echo "8080";phpinfo();)

点击查看原图

 

fastCGI配置成功,8080端口及根目录配置成功!同时80端口也运行正常,于是你大嚎一声“终于配置完成了!”

 

 【参考】

apache在相同端口及不同端口设置多个虚拟主机,以及在本机自定义域名

Apache设置不同端口访问不同目录

apache 服务 不同端口的访问不同目录设置

如何在不同端口指定不同的主文件夹,一个apache支持多个站点

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容