0

所以我注意到各种应用服务器的文档(想想 Unicorn、Ruby 的 Puma、Haskell 的 Warp 等)总是提到类似于“它被优化为应用服务器”的内容。通常,在描述在应用服务器前面的反向代理中使用 HTTP 服务器(如 Ngnix)的标准设置时会提到这一点。

所以我的问题是:Web 应用程序服务器的编程究竟是什么使它在提供由代码与 HTTP 服务器生成的数据时性能更高?是否有任何特定的工程权衡?或者更多的情况是 HTTP 服务器针对从磁盘提供文件进行了优化,所以他们只是想说 HTTP 服务器没有针对应用程序代码进行优化?

4

1 回答 1

1

首先,这确实属于ServerFaultSuperUser

但基本上,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 放在前面。

于 2014-05-04T06:51:39.010 回答