0

在过去的几年里,我使用 Apache httpd 服务器作为我的服务器。

据我了解 - 使用 Nginx 的最大优势是 Apache 为每个 HTTP 请求打开一个不同的线程 - 这可能会非常快速地加载我的服务器,而 Nginx 使用其他一些技术(事件驱动)以最大限度地利用我的服务器的内存和硬件。

到现在为止还挺好。

我正在构建一个新的 Web 服务,我希望它有很多 HTTP 流量,所以我决定使用 Nginx。

作为一名优秀的 Java 程序员,我更喜欢 Java 而不是 PHP,但在我的案例中使用它时遇到了一个概念问题:

在所有帖子中,我发现在其上使用 Java 的方法是用 Nginx + Tomcat(或其他 JavaServer)+ Java 包装应用程序 - 所以,如果我理解正确 - 我不会因为 Tomcat 而获得 Nginx 优势将为每个请求打开一个新线程,以便使用 Java Web 服务。

问题:

  1. 我理解正确吗?
  2. 将 Nginx 与 PHP 一起使用是否会为每个请求打开一个新进程但不是一个新线程?
4

2 回答 2

1
  1. 你理解正确。在这种情况下,nginx 充当反向代理,tomcat 充当应用服务器。大多数时候,瓶颈出现在应用层面:应用本身的应用服务器。
  2. PHP 使用进程而不是线程来执行请求,每个请求都需要一个 php-cgi 进程来处理,只有当这个请求完成时,才会释放该进程来处理其他请求。对于php-fpm,它通常会预先fork很多子进程,就像一个pool,我们需要根据机器的真实QPS和stat来计算这个pool的大小。
于 2013-07-19T08:31:55.890 回答
0

是的,您没看错,您在这里所做的是在 tomcat 上方放置一个额外的层,因此您不会获得优势,您将获得的唯一优势是提供资产(图像和静态文件)而不传递它们到 apache,这可能会带来一点优势。

为什么 php 有这个优势:因为当使用 nginx 而不是将 php 作为 apache 的模块(mod_php)运行时,我们安装了一个单独的服务器 php-fcgi 或 php-fpm,因此它独立于 apache 生成工作线程或线程或其他任何方法的方法。

于 2013-07-19T00:57:24.643 回答