建立Apache服务器通过FastCGI 与PHP,MySQL服务进行通信
Apache ->FastCGI->PHP,MySQL
一:前言
看到这个题目,相信大家应该就知道了,下面我们要说的什么内容了,不错本篇内容就是建立Apache服务器通过FastCGI 与Php,MySQL服务进行通信。那么什么是FastCGI呢?我们对它了解多少呢?
二:基于FastCGI的web工作流程
首先我们的了解一下CGI的工作流程:web server收到用户请求后,如果用户请求的是静态内容,会在web的前端直接响应用户,如果用户的请求时动态的内容,web会把请求提交给我们的CGi程序,CGI程序根据请求的相关参数会做出相应的处理,最终解释成html语句,然将web前端的请求内容返回到web server,web server在返回给用户客户端,就是简易的普通CGI的工作流程。
FastCGI就是基于普通CGI的扩展,但是它在web server和CGI程序之间建立了一个智能的可持续的中间层,统管CGI程序的运行,这样web server 服务器仅需要将请求传递到这个中间层(FastCGI),然后FastCGI会派生出几个可复用的CGI程序实例,将web的请求,分发给可复用的CGI程序,这些实例是可持续,可控的,可复用的,因此一方面避免了进程反复的fork,另一方面又可以通过中间层的控制和探测机制来监控这些实例的运行情况,根据不同状况的fork或者回收实例,达到了灵活性和稳定性的目的,通过上面的分析可以发现,FastCGI的主要优势在于处理动态页面的请求,这样运行我们将web server和处理动态页面运行在不同的主机上。其主要优点是实现了应用和web sever的分离
三:Apache,FastCGi,PHP,MySQL的部署环境
架构环境:
Apache:linux5.8 kernl 2.6.18-308.el5 httpd2.4
FastCGI: mod_fcgid-2.3.7(官网最新版软件包 )
Php:php-5.4.4
MySQL:mysql-5.5.24
四:部署安装
备注说明:这里我们暂且没有将Apache和php分离,而是在同一台主机上采用FastCGI模块通信的方式架构 |
在web的部署之前首先确保系统上
Development Libraries
Development Tools
X Software Development已经安装.
httpd的安装采用源码编译的方式,
由于采用Apache httpd2.4.2 ,该版本对linux的apr(可移植运行库)要求较高,这里需要升 级apr采用apr-1.4.6所以先升级apr
tar xf apr-1.4.6.tar.bz2 tar xf apr-util-1.4.1.tar.bz2
./buildconf ./configure –prefix=/usr/local/apr make make install
./buildconf --with-apr=/root/apr-1.4.6 ./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/ make make install apr 环境准备完毕 安装Apache,新建虚拟主机这里不再赘述---Apache httpd2.4.2及新建虚拟主机的配置详见本博客文章 http://haicang.blog.51cto.com/2590303/920671(linux 黄金组合-LAMP之架构),不过在这里阐述一下需要注意的地方
编译安装mod_fcgid模块
./configure.apxs --with-apxs=/usr/local/apache/bin/apxs make make install
mod_fcgid模块安装完后在/etc/httd/httd.conf 文件中会出现下面的内容,请 确保其正确安装,并且该模块处于启用状态
关于虚拟主机处理下面的内容其他的与LAMP架构中的都雷同
在编辑/etc/httpd/extra/httpd-vhosts.conf文件新建虚拟主机的过程中请确保如下如下内容添加
备注:FCGIWrapper 告诉apache 可以调用Fastcgi的应用程序
详细说明参考官网详细说明
http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html
Php的安装
准备工作:
Php支持mcrypt 扩展需要安装两个包 rpm –ivh libmcrypt-2.5.7-5.el5.i386.rpm rpm –ivh libmcrypt-devel-2.5.7-5.el5.i386.rpm Php的安装依赖的文件需要安装 X Software Development Php的软件包:php-5.4.4.tar.bz2 安装Php tar xf php-5.4.4.tar.bz2 ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt --with-config-file-path=/etc/php --with-config-file-scan-dir=/etc/php --with-bz2 --with-curl make make test make install 为php提供配置文件: # cp php.ini-production /etc/php/php.ini # cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm # chmod +x /etc/rc.d/init.d/php-fpm # chkconfig --add php-fpm # chkconfig php-fpm on
为php-fpm提供配置文件: # cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf 编辑php-fpm的配置文件: # vim /usr/local/php/etc/php-fpm.conf 配置pm.的相关选项为你所需要的值,并启用pid文件(如下最后一行): pm.max_children = 100 pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 8 pid = /usr/local/php/var/run/php-fpm.pid 打开监听端口 配置fpm模块的配置文件
接下来就可以启动php-fpm了:
service php-fpm start ps aux | grep php-fpm
在Apache的配置文件中添加web识别的网页类型
MySQL的安装也详见http://haicang.blog.51cto.com/2590303/920671文章和其配置一致,这里不罗嗦了。
四:最后验证
在IE中访问验证Apache 通过FastCGI和php,MySQL的连接
与Php的连接情况 |
与MySQL的连接情况 |
测试前与MySQL的连接
测试后(在mysql中未建立abc用户)
...........................................................................................
五 总结
自己在配置Apache过程中的错误:由于在配置完Mod_FactCGI模块后,在虚拟主机中未配置和Php连接的相关参数,导致无法和php通信,自然无法解析clinet端请求的页面内容 对Apace通过FastCGI模块和Php通信的理解不是太精确,只知道Apache可以通过FastCGI通信
使用FastCGI与普通的配置的区别:
1:在编译php时,不启用--with-apxs2=/usr/local/apache/bin/apx该选项,将php编译成Apache的模块而是使用mod_fcgid-2.3.7,
2:在Apache的虚拟主机中添加Apache与php建立的相关参数
3:php的fpm模块,需要打开监听端口
...............................................................................
六:后记
恕小声愚钝,由于对FastCGI的理解不到位导致在一台主机上的架构耗费了数日,呵呵。在linux的道路上,路漫漫其修远兮,吾将上下而求索啊
关于Apache和Php基于FastCGI,实现在不同主机的分离架构,欢迎与您的沟通,交流,如果你发现本人的内容或者理解有误,请您指正,谢谢!