Windows里配置Apache2.2+PHP5.3+mod_fcgid运行高效的FastCGI模式

日发现win平台的Apache也能够跑FastCGI模式了,就折腾了一会。FastCGI模式是经实践证实了比传统的模块模式运行效率高不少。记录以下:php

1、mod_fcgid配置说明html

一、首先下载mod_fcgid-2.3.6-win32-x86.zipLinux版本的也有:http://httpd.apache.org/download.cgi#mod_fcgid 将解压的相关文件复制到apache的“modules”目录下。linux

二、打开apache的配置文件“httpd.conf”,文件最后加入以下配置:数据库

LoadModule fcgid_module modules/mod_fcgid.so
AddHandler fcgid-script .fcgi .php
#php.ini的存放目录
FcgidInitialEnv PHPRC “D:/Server/PHP/php-5.3.6-nts”
# 设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程在处理完全部请求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#php-cgi每一个进程的最大请求数
FcgidMaxRequestsPerProcess 1000
#php-cgi最大的进程数
FcgidMaxProcesses 3
#最大执行时间
FcgidIOTimeout 120
FcgidIdleTimeout 120
#php-cgi的路径
FcgidWrapper “D:/Server/PHP/php-5.3.6-nts/php-cgi.exe” .php
AddType application/x-httpd-php .php

三、告诉APACHE执行方式。修改你的配置以下:(vhosts.conf)apache

<Directory “D:/Web”>
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>

也能够:安全

<VirtualHost *:80>
    DocumentRoot "D:\PHPstudy\PHPTutorial\WWW\vhosts\test.8g.com"
    ServerName test.8g.com
    ServerAlias test.8g.com
  <Directory "D:\PHPstudy\PHPTutorial\WWW\vhosts\test.8g.com">
      Options FollowSymLinks ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
     Require all granted
  </Directory>
</VirtualHost>

四、重启apache。app

五、若是配置没错的话,你运行phpinfo.php能够看到有以下的输出信息:ide

Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o mod_fcgid/2.3.6

 

 

 

 

2、mod_fcgid概念说明以及mod_fastcgi和mod_fcgid的区别测试

mod_fcgid是一个跟mod_fastcgi二进制兼容的Apache module。ui

原来的mod_fastcgi由于实现方式的限制,因此可能会建立了不少没必要要的进程,而实际上只须要更少的进程就能处理一样的请求。 mod_fastcgi的另一个问题是每个CGI的多个进程都共享同一个管道文件,全部到同一个fastcgi的通信都经过这个同名的管道文件进行, 这样当出现通信错误的时候,根本不知道正在通信的是哪个fastcgi,因而也没有办法将这个有问题的进程杀死。

mod_fcgid尝试使用共享内存来解决这个问题。共享内存里面有当前每一个fastcgi进程的信息(包括进程号,进程使用的管道文件名等),当 每次尝试请求fastcgi工做的时候,Apache将会首先在共享内存里面查询,只有在共享内存里面发现确实没有足够的fastcgi进程了,才会建立 新的进程,这样能够保证当前建立的进程数量恰好可以处理客户的请求。另外,因为每个fastcgi进程使用不一样名称的管道文件,因此能够在通信失败的时 候知道到底哪一个fastcgi进程有问题,而可以尽早的将其剔除。

3、mod_fcgid程序实现的目标

一、跟mod_fastcgi二进制兼容

只要在Apache中用mod_fcgid替换了mod_fastcgi,就能工做。原来的fastcgi程序不用从新编译,当即能够工做。

二、更严格的控制进程的建立

Apache中每个request handler都能经过共享内存知道当前系统fastcgi运行的状况,这样能够防止过分的建立fastcgi进程,无谓的消耗系统的资源。

三、简单清晰的进程建立速度控制策略

每个fastcgi都会维护一个计数器,这个计数器在程序建立和程序结束的时候都会增长,而这个计数器每秒会减1,直到0。当计数器的值高于某个阀值的时候,程序就会中止建立,直到计数器的值回落。这样既能够保证在请求忽然增多的时候可以快速反应(特别是Apache刚启动,须要大量建立程序的时 候),也能保证当fastcgi程序有问题,不断重起的时候,重起的速度不会太高而消耗过多的系统资源。

四、自动检测出有问题的进程

由于每一个fastcgi使用本身特定的管道文件,因此在通信错误的时候能够轻易知道哪个程序出现问题,而尽早的将其剔除。

五、可移植性

遵守Apache2的习惯,全部可移植的代码都放到一块儿,全部不可移植的代码都在arch目录下分开存放。当前已经测试过的系统包括 Linux , FreeBSD(已经包含入FreeBSD4和FreeBSD5的port中), Solaris, Windows 2000.

六、支持FastCGI方式运行的PHP

能够直接支持以FastCGI方式运行的PHP。由于PHP如今还不能保证全部的扩展代码都是线程安全的,因此并不建议在Apache2的线程模式 下使用mod_php。而以FastCGI方式运行的PHP则是其中一个解决办法。另外,使用mod_fcgi还能够在不修改任何PHP代码的状况下,得到数据库链接池的功能,大大减小PHP进程到数据库的链接。

 

转: http://www.ha97.com/3977.html

相关文章
相关标签/搜索