Apache + MySQL + PHP + FastCGI 配置(中)

安装 mod_fcgid.2.2

说明:这里我们不是用 PHP 官方网站推荐的 fastcgi ;改为使用国人编写的 fcgid。引用 fcgid 网站的解析:

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

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

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

程序实现的目标

mod_fastcgi二进制兼容
只要在Apache中用mod_fcgid替换了mod_fastcgi,就能工作。原来的fastcgi程序不用重新编译,立即可以工作。


更严格的控制进程的创建
Apache
中每一个request handler都能通过共享内存知道当前系统fastcgi运行的情况,这样可以防止过度的创建fastcgi进程,无谓的消耗系统的资源。


简单清晰的进程创建速度控制策略

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


自动检测出有问题的进程

因为每个fastcgi使用自己特定的管道文件,所以在通讯错误的时候可以轻易知道哪一个程序出现问题,而尽早的将其剔除。


可移植性
遵照Apache2的习惯,所有可移植的代码都放到一起,所有不可移植的代码都在arch目录下分开存放。当前已经测试过的系统包括 Linux , FreeBSD(已经包含入FreeBSD4FreeBSD5port), Solaris, Windows 2000.


支持FastCGI方式运行的PHP

可以直接支持以FastCGI方式运行的PHP。因为PHP现在还不能保证所有的扩展代码都是线程安全的,所以并不建议在Apache2的线程模式下使用mod_php。而以FastCGI方式运行的PHP则是其中一个解决办法。另外,使用mod_fcgi还可以在不修改任何PHP代码的情况下,获得数据库连接池的功能,大大减少PHP进程到数据库的连接。



tar zxvf mod_fcgid.2.2.tar.gz
cd mod_fcgid.2.2

vi Makefile    (将文件里面 top_dir 修改为你 httpd 的正确安装路径,如下:)

top_dir      = /usr/local/httpd

make
make install

ls -l /usr/local/httpd/modules/mod_fcgid.so    (检查下 fcgid 模块是否正确安装到 httpd 的模块目录中。)

编辑 apache 的配置文件 httpd.conf

vi /usr/local/httpd/conf/httpd.conf    (以下只列出增加或修改部分:红色字体为增加部分,蓝色为修改部分)

LoadModule fcgid_module         modules/mod_fcgid.so

IfModule mod_fcgid.c

        AddHandler fcgid-script .php .py .pl .fcgi
        SocketPath /tmp/fcgid.sock
        IdleTimeout 600
        ProcessLifeTime 3600
        MaxProcessCount 8
        DefaultMinClassProcessCount 3
        DefaultMaxClassProcessCount 3
        IPCConnectTimeout 20
        IPCCommTimeout 48

/IfModule

User apache
Group apache


Directory "/usr/local/httpd/htdocs"

#    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny

    FCGIWrapper /usr/local/php/bin/php-cgi .php
    FCGIWrapper /usr/local/php/bin/php-cgi .php5
    Options ExecCGI SymLinksIfOwnerMatch

    Allow from all

/Directory

编辑 PHP 的配置文件 php.ini

vi /etc/php.ini

找到  extension_dir = "./"  修改为:

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension = "memcache.so"

文件的最后添加如下面这些内容:

[xcache-common]
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so

[xcache.admin]
xcache.admin.user = "admin"
; xcache.admin.pass = md5($admin8801)
xcache.admin.pass = "f6c770a1c6a0cd6b5639baf16d4c6a3d"

[xcache]
xcache.cacher = On
xcache.shm_scheme = "mmap"
xcache.size = 32M
; cpu number (cat /proc/cpuinfo |grep -c processor)
xcache.count = 2
xcache.slots = 8k
xcache.ttl = 0
xcache.gc_interval = 0
xcache.var_size = 2M
; cpu number (cat /proc/cpuinfo |grep -c processor)
xcache.var_count = 2
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.readonly_protection = Off
xcache.mmap_path = "/dev/zero"


确定以上修改无误后,就保存退出,然后重新启动 apache 服务:

/etc/rc.d/init.d/httpd restart

vi /usr/local/httpd/htdocs/phpinfo.php

?php
phpinfo();
?


打开浏览器,查看 phpinfo.php 文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值