开发者资讯

 首页 > 开发者资讯 > 编程开发 > PHP服务器循环:从Apache到Nginx再回头

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

分享到:
【字体:
导读:
          本文是PHP100中文网原创翻译,转载请看文末的转载要求,谢谢合作!跟很多技术一样,PHP社区有太多的进展了。在过去的六七年里,许多系统管理员和PHP开发者在这方面就形成了一个相当引人注目的循环。LAMP里的A很多


本文是PHP100中文网原创翻译,转载请看文末的转载要求,谢谢合作!

       跟很多技术一样,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中分离开来,这点有利有弊。(PHP100小编的话:万物皆有利弊,看你看重哪些方面,然后选择相应的就好了。)
 
       每一个项目都需要选择网站服务器,对一些人来说,Nginx是最好的选择,对另外的人来说可能Apache或另外的网站服务器就是最好的选择了。永远都是这样子,但在去年我们看到有更多的人选择了Apache而不是Nginx。
 
附注:"DevOps是软件开发、运维和质量保证三个部门之间的沟通、协作和集成所采用的流程、方法和体系的一个集合。它是人们为了及时生产软件产品或服务,以满足某个业务目标,对开发与运维之间相互依存关系的一种新的理解。"这恰好体现了精益管理中的客户价值原则,即:以客户的观点来确定企业从设计到生产交付的全部过程,实现客户需求的最大满足。我们也可以把DevOps看作是一种能力,在缺乏这种能力的组织中,开发与运维之间存在着信息"鸿沟"。

原文:The PHP circle: from Apache to Nginx and back
译文:http://www.php100.com/html/it/focus/2014/1125/7899.html
(翻译:PHP100_Alex)
 
分享到:
PHP系统设计与云架构
       这几年我比较少写 PHP 了.          有阵子很迷它, 但是因为工作关系, 把较多的时间花在网络封包和数据库的分析工作上.          而且因为年记较大了所以也很难找到写程序的工作多半都在做工程师的 “工头”          对于这几年 PHP 的变化我来不及参与.      ...
盘点互联网巨头奉献的十大开源安全工具
       Facebook等大型互联网公司推动的服务器与数据中心、大数据工具的开源化项目类似,当大型互联网公司们在超大规模基础设施运营方面面临的挑战超出技术厂商的能力时,这些巨头就选择反客为主,成为创新技术的推动者和提供者。同样的情况也在信息安全领域中发生着。不少大型互联网公司经常会将自己开发的顶级安全...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……