首先,这确实属于ServerFault或SuperUser。
但基本上,Apache 和 Nginx 严格交付静态 Web 内容。是的,您可以将 PHP 作为模块安装,它会在请求页面时解析脚本。但这一切都是按需提供的。这意味着程序仅在请求页面时运行。
相反,应用服务器运行的程序一直在内存中处于活动状态。根据您希望系统执行的操作,这可能会带来一些工程优势。因此,Tomcat 或Passenger(用于Ruby)运行Java 和Ruby 应用程序,并经过优化以在生产服务器环境中执行此操作。
为什么将 Apache 或 Nginx 附加为前端?因为归根结底,Apache 和 Nginx 仍然是简单交付 Web 内容的最佳工具。并有更好的优化和安全性来做到这一点。
因此,应用服务器专注于让 Java 或 Ruby 尽可能干净地运行并提供基本的 Web 内容。而 Apache 和 Nginx 则专注于 Web 交付的前端。
作为系统管理员,我更喜欢通过 Apache 或 Nginx 进行代理,因为我已经知道如何配置和优化这些工具以供我使用。如果我必须学习如何微调Passenger 或Tomcat,它应该足以让我让它运行,这样我就可以将Apache 或Nginx 放在前面。