apache配置 之 fastcgi 与mod_php

[cgi]

web server收到用户请求,并把请求提交给cgi程序,cgi程序根据请求提交的参数作相应处理,然后输出标准的html语句返回给web
      server,web server再返回给客户端,这就是普通cgi的工作原理。

      从上面看,cgi所要实现的不过是动态网页而已,这种处理方式的特点就是每接到一个请求,web
      server都要fork出一个单独的cgi程序的进程来处理,这种方式的好处是把web
      server和具体的程序处理独立开来,结构清晰,可控性强,同时缺点就是如果在高访问需求的情况下,cgi的进程fork就会成为很大的服务器负担,想象一下数百个并发请求导致服务器fork出数百个进程就明白了。这也是为什么cgi一直背负性能低下,高资源消耗的恶名的原因。

[fast-cgi]

 1. FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。

 2. FastCGI 可在任何平台上使用,Netscape Enterprise 及 IIS 都有 FastCGI 的模块可供使用,阿帕契 (Apache,以及利用 Apache 衍生出做的服务器) 上也有 mod_fastcgi 可用。

 3. FastCGI 支持 C/C++JavaPHPPythonRubyPerlTcl 等程序语言。

 4. FastCGI 的应用程序亦兼容于 CGI。即 FastCGI 的应用程序也可以当成 CGI 来执行。

 5. 现有的 CGI 程序要改写成 FastCGI 非常简单,最少可能只需要多加入三行程序代码。

 6. FastCGI 的侦错方式与 CGI 大同小异,只要带入程序所需的环境变量及参数,即可在命令列模式执行或侦错。

 7. FastCGI 应用程序的写作方式与 CGI 类似,除了几项原则要特别注意外,FastCGI 的写作方式跟 CGI 几乎一样,与学习 Web Server API 比较起来, FastCGI 简单多了。

 8. FastCGI 支持分布式运算 (distributed computing),即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

    [配置]

     

1.编译安装php,不能带–with-apxs2=,带上--enable-fastcgi
2.安装mod_fcgid
wgethttp://jaist.dl.sourceforge.net/sourceforge/mod-fcgid/mod_fcgid.2.2.tgz

tar zxvf mod_fcgid.2.2.tgz
cd mod_fcgid.2.2
make
make install

( /****** 或者可以选择安装mod_fastcgi
wget
http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
tar zxvf mod_fastcgi-2.4.6.tar.gz
cd mod_fastcgi-2.4.6
cp Makefile.AP2 Makefile
vi Makefile,编辑top_dir = /usr/local/apache2
make
make install
*****/ )

vi /usr/local/apache2/conf/httpd.conf,加入:

### fastcgi ###
LoadModule fcgid_module modules/mod_fcgid.so
ScriptAlias /fcgi-bin/ "/usr/local/php/bin/"
AddHandler php-fastcgi .php
Action php-fastcgi /fcgi-bin/php-cgi
AddType application/x-httpd-php .php

<IfModule mod_fcgid.c>
#    AddHandler fcgid-script. .php .py .pl .fcgi
    AddHandler fcgid-script. .php .fcgi   ### 暂时只配置支持.php
    IdleTimeout 300
    ProcessLifeTime 1800
    MaxProcessCount 100
    DefaultMinClassProcessCount 3
    DefaultMaxClassProcessCount 8
    IPCConnectTimeout 15
    IPCCommTimeout 300
    MaxRequestsPerProcess 100
    # RewriteCond %{REQUEST_URI} ^/fcgi-bin/.* [NC]
    # RewriteRule .*/php$ /nonexistent.file [L]
</IfModule>

# <Files ~ (/.php)>
#    SetHandler fcgid-script
#    FCGIWrapper /usr/local/php/bin/php .php
#    Options +ExecCGI
#    allow from all
#</Files>
### fastcgi ###

把:
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
改成:
<Directory />
    Options FollowSymLinks +ExecCGI
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

( /****** 参数解释 ****
IdleTimeout 发呆时限
ProcessLifeTime 一个进程的最长生命周期,过期之后无条件kill
MaxProcessCount 最大进程个数
DefaultMinClassProcessCount 每个程序启动的最小进程个数
DefaultMaxClassProcessCount 每个程序启动的最大进程个数
IPCConnectTimeout 程序响应超时时间
IPCCommTimeout 与程序通讯的最长时间,上面的错误有可能就是这个值设置过小造成的
MaxRequestsPerProcess 每个进程最多完成处理个数,达成后自杀
*****/ )

把具体VirtualHost对应的Directory做修改如下:

<Directory PATH>
    Options FollowSymLinks
    AllowOverride FileInfo Options All
    Order allow,deny
    Allow from all
</Directory>
改成:
<Directory PATH>
    FCGIWrapper /var/www/php/bin/php .php
    Options FollowSymLinks +ExecCGI
    AllowOverride FileInfo Options All
    Order allow,deny
    Allow from all
</Directory>

/usr/local/php/bin/php -v 如果看不到类似于PHP 5.2.11 (cgi-fcgi) (built:的话,则可以:mv php php-cli
cp php-cgi php

重启Apache

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值