据说 Nginx 比 Apache 更节省资源,配置起来也更容易。一位朋友告诉我,“它不能做 Apache 能做的一些事情,但无论如何我都不需要那些事情。”
不过,我很好奇:Apache 可以做哪些 Nginx 不能做的事情?我不需要一份详尽的列表,只需要对哪些场景下 Apache 是更好的选择有一个大致的了解。
答案1
我认为 Nginx 仍缺少的最大部分是完整的 WebDAV 支持。几乎所有其他方面都由核心或第三方模块涵盖。
Nginx 在设计上不支持 mod_php 之类的东西,所以我不确定你是否可以说 Nginx 缺少这些部分。这更像是 Nginx 相当有力地告诉你使用这些东西是愚蠢的。
答案2
Apache 拥有大量可用的模块,可以实现 Nginx 无法实现的一些部署场景。
一个例子是mod_dav_svn
通过 HTTP 托管 Subversion。仅有的适用于 Apache。其他值得注意的例子包括mod_perl
或mod_php
。虽然大多数传统设置也可以通过 FCGI(或 WSGI,或 Passenger)完成,但如果您需要在 Web 服务器内实现自定义身份验证方案(就像使用 Redmine/ChiliProject 为 git 或 svn 托管所做的那样),那么在进程内拥有一个实际的解释器会很有帮助。
一般来说,你的朋友是对的:大多数常见的部署场景也可以用 nginx 解决,但如果你必须构建一些更“特殊”的东西,Apache 仍然更灵活。
答案3
这个故事的简短版本是 Apache很多插件和社区围绕它建立。Nginx 出现的时间相对较短,因此它还没有社区代码库。
当人们问我两者有何不同时,Nginx 就像一把牛排刀,用途广泛,而且在某些方面做得非常好。Apache 就像一把瑞士军刀,它拥有大量不同的功能,而且都做得相当好。
答案4
首先,它有许多模块和巨大的安装基础。但这并不是 Apache 的真正有你应该关注的是 Apache做:它可以更好地提供 PHP、Python、Perl、Java 等动态内容。
当然你也可以用 Nginx 来做到这一点(但在我看来这有点黑客),但在 Apache 上运行的解决方案比在 NginX 上运行的解决方案更加成熟,而且在处理高负载和出色的重写器/反向代理方面也比 Apache 更好。
每项工作都有合适的工具!