apache与php调用关系思考

上一篇 / 下一篇  2012-01-17 18:16:48 / 个人分类:others

  今天,在讨论环境问题的时候,突然脑子里面闪过一个问题,LAMP这样的结构,mysql可以独立于其它几个单独存在,然后通过一个$connect = mysql_connect("localhost" user_name  password)来进行跟DB之间的通信,那么我把apache和php能不能也分开独立部署在不同的机器上呢?
  于是,我带着这样的问题,查阅了下apache解析php的原理和php本身的运行原理。其中谈到,当apache在启动之后,动态的加载了一些模块,当中如果需要处理php的请求,就有对应的mod_php5.so这个模块被动态加载,同时这个模块会做一个ap hook_config的动作,从而使得apache在启动起来之后,就通过hook技术,连带启动mod_php5.so这个模块的加载,接收客户端的php请求。php请求发送到web server之后,通过这个模块接收了php请求,那么对应的php文件在运行的时候,通过php内核将相应内容转发给zend 引擎,zend引擎在解析处理的时候,与php的扩展层进行相应的配合处理,最终在扩展层处理完成之后,递归的交还控制权,最后由web server将处理的结果返回给客户端的浏览器。
   那么,在这里最起码可以明确一个问题,如果在A,B两台机器上,B机器仅仅只安装PHP,那么B机器本身是没有办法将来自于客户端的PHP请求解析执行完成用户需要的内容返回到客户端的浏览器的。道理我想大家都明白了,因为B机器如果连web server都没,根本就无法完成对用户端的请求的接收,那么无法接收到客户端的请求又何来处理呢?尽管这个问题很明显,但是我又有了另外一个疑惑,那么我在A机器上安装好apache这样的web server,通过在A机器上loadModule对应的PHP集成处理模块mod_php5.so,那么由A机器来接受用户请求,对于PHP请求,由A机器中的PHP处理模块将其转发给B机器(通过TCP协议建立连接,转发对应的数据)然后在B机器上完成业务逻辑的处理,在通过建立的连接回传处理完成的数据,最终由A机器将整个页面内容回传给用户的浏览器端,这个可不可以呢?mod_php5.so能不能有这个实现呢?就是在A机器接收到请求后,它能完成tcp到B机器把请求的参数内容传给这个php逻辑处理文件呢?
  有同事问我,为什么我会想这么做呢?我是这样想的,假设,这样的情况是可以的,那么我们是否可以在A机器上只安装apache,然后A机器主要用来处理客户端的请求,接收和转发最多还有一个回传内容给浏览器,而更多的逻辑处理我们就可以放在另外的机器上去处理,比如这里的B机器。这样的话,我们就可以尽可能多的利用A机器的资源来完成更多的请求的处理,从而提升整体的架构的性能处理能力呢?(这个有点类似与nginx的反向代理的意思)
  对于这个问题我还不能确定,打算研读下mod_php5.so的源文件来看看,是否能否确定这个问题?
  以上纯属个人的思考,总结,错误之处,遗漏之处难免,欢迎高人指点迷津,谢谢

TAG:

引用 删除 miaowenhua   /   2015-01-06 13:13:08
您好,看了您的文章,“apache与php调用关系思考”,我也是有类似疑问,想和您探讨下,如果可以不胜感激,十分迫切的想要得到自己想要的答案.我的qq:408760961
 

评分:0

我来说两句

Open Toolbar