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 服務已被重啟。