PHP服务器循环:从Apache到Nginx再回头

回复 星标
更多
PHP服务器循环:从Apache到Nginx再回头
.
.
.
.
.
.

跟很多技术一样,PHP社区有太多的进展了。在过去的六七年里,许多系统管理员和PHP开发者在这方面就形成了一个相当引人注目的循环。

LAMP里的A

很多年来,PHP都传统地运行在“LAMP”堆栈里:Linux,Apache,MySQL和PHP。Apache是实际上的网站服务器,通常与PHP结合起来当做mod_php或CGI来运行。它很有效,在mod_php方案中,它甚至是一个运行你的PHP应用的快速方式。但权限好像一直都个痛处,因为里面的一切都会被当做Apache用户来执行。Apache2-mpm-itk曾试图想解决这个问题,但一直没能做到。

然后随着时间的流逝,越来越多的问题伴随着PHP应用和服务器安装的权限都浮现出来。然后Nginx就应运而生了。

Nginx的崛起

一个新的网站服务器走进历史舞台,宣称有着闪电般的速度,高度的可扩展性,并用事件代替线程……在这里你能将你的PHP应用发展到百万数量级,这就是当时很多开始从Apache服务器移植到Nginx的系统管理员的真实想法。

\

因为Nginx没有像mod_php这样的东西,就必须找到解析PHP的另一个替代产品。那时候PHP 5.2还是个问题,然后一个叫php-fpm的东西就出现了。这对PHP世界来说,是革命性的改变!忽然之间,世间就有了能把PHP进程与服务器分离开的可靠方式,它允许你第一次能正确地使用像Nginx这样的网站服务器。

在过去那些PHP 5.2的日子里,对要管理配置的系统管理员来说,php-fpm的出现还是具有很大创造性的。从PHP 5.3到现在,php-fpm在PHP的内核里得到了官方的支持,然后就变得更主流了,服务器的配置变得更容易管理了。

但自从Nginx去除了来自Apache的AllowOverride选项(这个选项允许你使用.htaccess文件来覆盖网站服务器配置,这也是那时候为什么Nginx变得那么流行的主要原因,因为AllowOverride选项被证明是一个真正的瓶颈),就意味着所有的重写,所有的缓存标头,所有的附加gzip规则等等,都必须在Nginx配置中重新进行定义,并且这些配置通常都是系统管理员在管理的,一般跟开发者并没有什么关系。所以那些不管理他们自己服务器的PHP开发者们就丧失了从他们的应用里面重写服务器配置的灵活性。

结果,PHP开发者和系统管理员不得不加强沟通,他们必须要协调做出了那些更改。我真的相信DevOps(大意为开发组与运维组那点事,PHP100小编在文章最后为大家详解)运动就要来了,至少对PHP社区来说是这样的,这样的后果就是:原来正常情况下完全分离的两个世界(开发组和运维组),现在必须进行沟通并且相应地做些更改。两者都要对对方的请求给予反馈,因为他们都不能单独就做出改变。

哎,随着时间越来越长,人们发现它弊大于利。PHP开发者再也不像以前那么灵活了,因为需要通过系统管理员修正配置后才能做出更改(在通常PHP开发者并不管理服务器的情况下)。Nginx的新鲜劲儿很快就过去了,它完全变成了一个烦恼,耽误了正常的工作进程。

但在这时候,在非Apache上运行网站服务器的概念,以及在PHP-FPM上运行你的PHP代码,真的已经变成了最平常不过的事情了。我们再也不会把mod_php当做实际上的标准了。

重拾你们以前的信仰——Apache

转移到Nginx让我们得到一条可贵的教训:还有一种不同的方式来运行你的PHP代码。作为一个PHP开发者来说,对某款特定的应用,你想对服务器的行为进行独立控制。

我并不是说Nginx退出了历史的舞台。但我看到了从Nginx重新回到Apache的大迁徙。Apache的配置已经跟六七年前完全不同了,不再是mod_php和CGI了。但有一个配置融合了我们从Nginx阶段里学到的一个教训,那就是用PHP-FPM后台程序代替Apache里的模块。在不牺牲性能的前提下,把网站服务器用户和PHP用户分离开来。

我们这些天来做的Apache配置仍使AllowOverride变得有效。他们允许PHP开发者来管理他们自己覆盖配置,他们自己的标头配置和他们自己的HTTP身份验证设置,如果PHP开发者愿意的话。跟以前一样,Apache额SloeLoris还是比较容易受到攻击(还有其他许多类型的攻击),然而Nginx才变得更有弹性了。是的,Apache是有了下降的趋势,但它有很多特别棒的功能,带有AllowOverride的.htaccess文件便是其中强大的功能之一。

离开Apache的循环,换个像Nginx的第二选择服务器,然后再慢慢的换回到Apache,是我们一直以来亲眼目睹的事情。在几年以后,我们可能会转移另外一种运行PHP和配置我们服务器的方式上去。

那么,Nginx就不宜使用了?

当然不是这样了。

当我看到人们慢慢的从Nginx阵营中离开的趋势时,其实这个服务器里还有很大的价值:配置需要系统管理员管理,这就增进了开发组合运维组之间的沟通。把网站服务器完全从Apache中分离开来,这点有利有弊。

每一个项目都需要选择网站服务器,对一些人来说,Nginx是最好的选择,对另外的人来说可能Apache或另外的网站服务器就是最好的选择了。永远都是这样子,但在去年我们看到有更多的人选择了Apache而不是Nginx。


附注:"DevOps是软件开发、运维和质量保证三个部门之间的沟通、协作和集成所采用的流程、方法和体系的一个集合。它是人们为了及时生产软件产品或服务,以满足某个业务目标,对开发与运维之间相互依存关系的一种新的理解。"这恰好体现了精益管理中的客户价值原则,即:以客户的观点来确定企业从设计到生产交付的全部过程,实现客户需求的最大满足。我们也可以把DevOps看作是一种能力,在缺乏这种能力的组织中,开发与运维之间存在着信息"鸿沟"。

原文地址:http://www.php100.com/html/it/biancheng/2014/1125/7899.html

2015-06-22 21:07:48更新过
新窗口打开 关闭