如何使用PHP进行3层

时间:2011-01-03 19:42:43

标签: php

我要求客户端将我的PHP Web应用程序设置为3层。例如,我将在DMZ中的Apache上有一个Web服务器,但它不应包含任何数据库连接。它应该连接到承载业务对象但位于防火墙后面的中间服务器。然后这些对象连接到另一台服务器上的SQL集群。

我实际上是使用.NET完成的,但我不确定如何使用PHP设置我的堆栈。我想如果我将中间层创建为第二个Web服务器,我可以使用基于REST的Web服务将我的UI前层调用中间层,但这看起来过于复杂。

主要原因是高级安全性:我们在DMZ第一层Web服务器上没有任何密码。第二个原因是可扩展性 - 在不同层上有多个服务器可以处理请求。最后一个原因是部署 - 如果我可以将一组服务器脱机进行测试,然后再将它们重新投入生产,这将更容易。

是否有开源项目显示如何执行此操作?我能找到的唯一例子是从另一台机器上的共享驱动器托管文件的Web服务器(类似于DotNetNuke如何假装为3层),但这不安全。

注意:我已经在SO中查找了这个答案,我确实看到了很多类似的问题,但没有找到任何真正回答的人。这不是关于数据访问层(虽然我会使用它) - 我的主要问题是UI和中间层之间的设计。

1 个答案:

答案 0 :(得分:6)

一种选择是使用FastCGI

在第一层,只需让前端服务器(ApacheLighttpdNginX等)连接到第二层的FastCGI服务器。

另一种选择是从第一层到第二层的反向代理。这与第一个示例非常相似,只是第二层运行Web服务器,而FastCGI则不运行。

但你需要问自己的问题是为什么。您可以通过2层实现相同的功能,并且每个层只需要一个单独的网络(因此DMZ的服务器将具有2个网卡,每个网络一个)。数据库仍然与世界隔离,但您不必担心在系统中添加不必要的复杂性...请记住,您添加的部分越多,失败的就越多......