Apache 和 Nginx 組合在 Timeweb 中是如何實現的
對許多公司來說,Nginx + Apache + PHP 是非常典型且常見的組合,Timeweb 也不例外。 然而,準確地理解它是如何實現的可能是有趣且有用的。
當然,這種組合的使用取決於客戶的需求。 Nginx 和 Apache 都扮演著特殊的角色,各自解決特定的問題。
基本設定 阿帕奇 在 Apache 本身的設定檔中執行,客戶端站點的設定透過 .htaccess 文件。 .htaccess是一個設定文件,客戶端可以在其中獨立配置Web伺服器的規則和行為。 此設定將專門應用於他的網站。 例如,借助 Apache 功能,使用者可以在同一 PHP 版本內將運行模式從 mod_php 更改為 mod_cgi; 您可以設定重定向、SEO 最佳化、方便的 URL、PHP 的一些限制。
Nginx的 用作代理伺服器將流量重定向到 Apache,並用作 Web 伺服器來提供靜態內容。 我們還為 Nginx 開發了安全模組,使我們能夠保護使用者的數據,例如分離存取權限。
讓我們假設使用者造訪我們客戶的網站。 首先,使用者存取 Nginx,它提供靜態內容。 它立即發生。 然後,當需要載入 PHP 時,Nginx 將請求轉送給 Apache。 Apache 與 PHP 一起已經可以產生動態內容。
Timeweb 中 Apache 和 Nginx 捆綁包的功能
我們的虛擬主機為 Apache 和 Nginx 實作了 2 個主要運行方案: 共享和專用.
共享方案
此方案適用於大多數用戶。 它的特點是簡單性和資源密集度:共享方案使用更少的資源,這就是其資費更便宜的原因。 根據此方案,伺服器運行一個 Nginx(可以為所有使用者請求提供服務)和多個 Apache 實例。
共享方案長期以來一直在改進:我們逐漸糾正了缺點。 方便的是,無需修改原始程式碼即可完成。
共享方案
專用方案
Dedicated需要更多資源,因此其資費對客戶來說更貴。 在專用方案中,每個客戶端都有自己獨立的 Apache。 這裡的資源是為客戶端保留的,它們是專門分配的。 工作原理:伺服器上有多個版本的 PHP。 我們支援版本 5.3、5.4、5.6、7.1、7.2、7.3、7.4。 因此,每個版本的 PHP 都會啟動自己的 Apache。
專用方案
安全區。 在 Nginx 中設定區域
以前,對於 Nginx,我們使用了許多共享記憶體區域(區域)——每個網域一個伺服器區塊。 此設定需要大量資源,因為為每個網站建立了單獨的區域。 然而,在Nginx設定中,大多數站點都是同一類型,因此由於在模組中使用了map指令,它們可以被放置在一個區域中 ngx_http_map_模組,它允許您指定對應關係。 例如,我們有一個區域模板,必須在其中提供變數:網站路徑、PHP 版本、使用者。 這樣就加速了Nginx配置的重新讀取,也就是重新載入。
這種配置極大地節省了RAM資源並加快了Nginx的速度。
重新加載就不行了!
在共享方案中,我們無需在更改網站設定時重新載入 Apache。 以前,當客戶想要新增網域名稱或更改 PHP 版本時,需要強制重新載入 Apache,這會導致回應延遲並對網站效能產生負面影響。
我們透過建立動態配置擺脫了重新載入。 謝謝
共享架構配置
那麼 Docker 呢?
許多公司已經轉向基於容器的系統。 Timeweb 目前正在考慮這種轉變的可能性。 當然,每個決定都有利有弊。
除了不可否認的優勢之外,容器系統還為使用者提供了更少的資源。 在Timeweb中,由於所描述的託管方案,用戶在RAM上沒有限制。 它接收的資源比容器中的資源多。 此外,用戶可能載入了更多的Apache模組。
Timeweb 為大約 500 個網站提供支援。 我們承擔重大責任,不會對複雜的架構進行即時、不合理的更改。 Apache 和 Nginx 組合可靠且經過時間測試。 反過來,我們嘗試透過獨特的配置來實現最大效能。
為了高品質、快速地運行大量站點,需要使用Apache和Nginx的模板和動態配置。 它允許您輕鬆快速地管理大量類似的伺服器。
來源: www.habr.com