Apache 与 nginx

您可以提高托管客户网站的 web 服务器的工作性能,方法是安装 nginx,一个辅助的高性能 web 服务器,通常用作反向代理服务器。该 web 服务器专门为交付大容量静态内容(例如,图像、视频、css、xml,等)而设计。与 Apache 相反,nginx 在处理大量并行连接时反而更高效。与 Apache 相比该 web 服务器的另一个优势是 nginx 在每个客户端连接上内存占用小的多。

为了充分利用 nginx 的所有优势,Plesk 会配置它作为反向代理服务器置于互联网和 Apache 之间(如下图)。也就是说 nginx 会成为处理所有来自网站访客的接收连接请求的前端 web 服务器。这些请求会发送到 Apache,会被区分为静态和动态内容请求。如果请求是静态文件请求(例如,jpg、css、html,等),Apache 会通过所有注册的处理程序传递请求(应用 .htaccess 目录级别的配置,覆写 URL 等等)并返回给 nginx 一个响应,该响应只包含请求文件在文件系统中所处的位置。nginx 会找到该文件然后发送给客户端。如果请求是动态文件请求(例如 PHP 脚本),Apache 会执行该文件并发送响应给 nginx,然后由 nginx 交付给客户端。

nginx 和 Apache 的组合有如下优势:

Plesk 如何在 nginx 的帮助下处理 HTTP 请求的技术详情将接下来进一步阐述。欲了解如何在 Plesk 中打开 nginx,请参阅 安装 nginx。如果您不想使用 nginx,请根据小节 关闭 nginx 中的说明设置 Apache 为您的前端 web 服务器。

带有 nginx 支持的 Plesk 如何处理 HTTP 请求

为了无缝整合 nginx 和 Apache,Plesk 会额外使用两个 Apache 模块:

我们进一步来看 Plesk 在这些模板的帮助下是如何处理静态和动态内容请求的。

处理静态文件的 HTTP 请求的序列如下(如图):

  1. 一个客户发送一个请求给一个 web 服务器。
  2. nginx 会在请求中添加 X-Accel-Internal(被 mod_aclr2 使用)和 X-Forwarded-For (包含客户端的 IP 地址)请求头然后发送请求给 Apache。
  3. Apache 会接收到请求并开始通过注册的处理程序处理该请求(应用 .htaccess 配置,覆写 URL,等等)。在此步骤中,mod_rpaf 会使用来自 X-Forwarded-For 请求头中的客户端地址替代 REMOTE_ADDR Apache 中 nginx 服务器的 IP 地址。
  4. 在被所有注册的处理程序处理过后,请求会抵达 mod_aclr2。该处理程序会检查 X-Accel-Internal 请求头是否存在。如果该请求头存在,该模块会给 nginx 发送一个带有零内容长度和 X-Accel-Redirect 请求头的响应。该请求头包含由 by mod_aclr2 确定的文件的确切地址。
  5. nginx 一旦收到该响应,即会查找文件并交付给客户端。

下图是 Plesk 处理程序如何处理 2 KB GIF 文件请求的示例。

static_seq

对于处理动态内容的请求,其前三步骤是相同的。然后请求会传递到相应 Apache 模块(mod_php mod_perl mod_cgi,等等)的处理程序。请求永远不会到达 mod_aclr2(SSI 请求除外)。处理程序会生成一个响应并发送到 nginx,而由 nginx 交付给客户端。下图展示了 Plesk 如何处理 PHP 文件请求的过程。


在本节:

安装 nginx

关闭 nginx

 

安装 nginx

如果您干净安装 Plesk,将会默认启用 nginx。如果您从早期版本升级,您则可以在升级后任何时候添加 nginx 组件,具体操作是进入 工具与设置 > 更新与升级 > 添加组件。添加该组件后,您应运行 反向代理服务器 (nginx) 服务(在 工具与设置 > 服务管理 中)。

您可以在 工具与设置 > 服务器组件 中查看已安装 nginx 服务器的版本。

nginx version

 

关闭 nginx

若要返回到只有单个 Apache web 服务器的配置,请停止 反向代理服务器 (nginx) 服务(在 工具与设置 > 服务管理)。

nginx_stop

若要再次设置 nginx 为前端 web 服务器,请启动 反向代理服务器 (nginx) 服务。

注意:启动或停止 反向代理服务器 (nginx) 服务的运行不仅是启动或停止 nginx,实际上还会切换 web 服务器配置(nginx 和 Apache 组合或仅设置 Apache 为前端 web 服务器)。重启操作与其它任何服务的操作方式相同:nginx 服务已被重启。