當您瀏覽到當前頁面時,請思考一下發生了什麼。您可能點擊了通過電子報收到的鏈接,或者點擊了Tecmint.com首頁上的鏈接,然後被帶到了這篇文章。
簡而言之,您(或實際上是您的瀏覽器)向托管此站點的Web服務器發送了HTTP請求,服務器則返回了HTTP響應。
儘管聽起來很簡單,但這個過程涉及的遠不止這些。必須在服務器端進行大量處理,以呈現出您可以看到的格式漂亮的頁面,其中包括所有的資源 – 靜態和動態。
不深入挖掘的話,您可以想象一下,如果Web服務器需要同時回應許多這樣的請求(先從幾百個開始),它很快就會使自己或整個系統陷入瘋狂。
這就是Varnish的用武之地,它是一個高性能的HTTP加速器和反向代理。在本文中,我將解釋如何安裝和使用Varnish作為Apache或Nginx的前端,以更快地緩存HTTP響應,而不會對Web服務器造成進一步的負荷。
但是,由於Varnish通常將其緩存存儲在內存中而不是磁盤上,我們需要小心並限制用於緩存的RAM空間。我們將在一分鐘內討論如何做到這一點。
目錄
如何 Varnish 工作

在 Linux 服务器上安装 Varnish 缓存
本文假设您已安装了一个 LAMP 或 LEMP 服务器。如果没有,请先安装其中一个堆栈。
- 如何在基於 RHEL 的發行版上安裝 LAMP 伺服器
- 如何在 Ubuntu 上安裝 LAMP 伺服器
- 如何在 Debian 上安裝 LAMP 伺服器
- 如何在基於 RHEL 的發行版上安裝 LEMP 伺服器
- 如何在 Ubuntu 上安裝 LEMP 伺服器
- 如何在 Debian 上安裝 LEMP 伺服器
官方文件建議從開發者自己的存儲庫安裝 Varnish,因為他們始終提供最新版本。您也可以選擇從您的發行版的官方存儲庫安裝該套件,盡管它可能會有點過時。
此外,請注意,該項目的儲存庫僅提供對64位系統的支持,而對於32位機器,您將不得不求助於您的發行版的官方維護的儲存庫。
在本文中,我們將從每個發行版官方支持的儲存庫中安裝Varnish。做出這一決定的主要原因是要在安裝方法上提供一致性,並確保所有架構的自動依賴解析。
在基於Debian的Linux中安裝Varnish
在基於Debian的發行版上,您可以使用apt命令安裝Varnish,如下所示。
# apt update # apt install varnish

在基於RHEL的Linux中安裝Varnish
在基於RHEL的發行版,如CentOS、Rocky和AlmaLinux上,您需要在安裝Varnish之前啟用EPEL倉庫,並使用yum命令進行安裝,如下所示。
# yum install epel-release # yum update # yum install varnish

如果安裝成功完成,您將根據您的發行版獲得以下varnish版本之一:
# varnishd -V varnishd (varnish-6.5.1 revision 1dae23376bb5ea7a6b8e9e4b9ed95cdc9469fb64)
最後,如果安裝過程沒有為您自動啟動Varnish,您需要手動啟動它並設置它在開機時自動啟動。
# systemctl start varnish # systemctl enable varnish # systemctl status varnish

默認情況下,varnish服務使用6081端口,您可以通過運行以下netstat命令來確認。
# netstat -tunlp | grep 6081

在Linux中配置Varnish Cache
如前所述,Varnish位於外部客戶端和Web服務器之間。因此,為了使緩存對最終用戶透明,我們需要:
- 將 Varnish 監聽的默認端口 6081 更改為 80。
- 將 Web 服務器監聽的默認端口更改為 8080,而不是默認的 80。
- 將來自 Varnish 的傳入流量重定向到 Web 服務器。幸運的是,在我們完成 1) 和 2) 步驟後,Varnish 會自動執行此操作。
更改 Varnish 端口
由 varnishd 進程由 systemd 控制,其單元文件位於 /usr/lib/systemd/system/varnish.service,其中包含默認的 Varnish 運行時配置。
在這裡,我們需要將默認的 Varnish 端口從 6081 更改為端口 80,並將緩存大小更改為 1GB,如以下命令所示,該命令將在編輯器中打開單元文件,如下所示。
注意:您可以根據您的硬件資源更改內存量,或者選擇將緩存文件保存到磁盤。
$ sudo systemctl edit --full varnish OR # systemctl edit --full varnish

在對 /etc/systemd/system/varnish.service 文件進行更改後,您需要通過運行以下命令重新加載 Systemd 守護進程:
# systemctl daemon-reload
更改 Apache 或 Nginx 端口
更改Varnish端口後,您需要將您的Apache或Nginx網頁伺服器端口從預設的80更改為最常見的網絡端口,即8080。
---------- On Debian-based Systems ---------- # nano /etc/apache2/ports.conf [On Apache] # /etc/nginx/sites-enabled/default [On Nginx] ---------- On RHEL-based Systems ---------- # vi /etc/httpd/conf/httpd.conf [On Apache] # vi /etc/nginx/nginx.conf [On Nginx]

完成更改後,別忘了重新啟動Varnish和網頁伺服器。
# systemctl restart varnish ---------- On Debian-based Systems ---------- # systemctl restart apache2 # systemctl restart nginx ---------- On RHEL-based Systems ---------- # systemctl restart httpd # systemctl restart nginx
在Linux中測試Varnish快取
第一個測試是通過HTTP請求使用curl命令並驗證它是否由Varnish處理:
# curl -I http://localhost

Varnish還包括兩個方便的工具:
- 實時查看Varnish日誌,直觀地稱為varnishlog。
- 顯示Varnish快取統計信息,稱為varnishstat。
作為第二個測試,在接下來的屏幕錄像中,我們將在一個CentOS伺服器(dev1,屏幕上半部分)和一個Debian伺服器(dev2,屏幕下半部分)上顯示日誌和統計信息,同時發送HTTP請求並接收響應。
測試網頁伺服器性能基準
我們的第三個也是最後一個測試將包括使用ab 基準測試工具對網頁伺服器和 Varnish 進行基準測試,並比較兩者的回應時間和 CPU 負載。
在這個特定的例子中,我們將使用CentOS伺服器,但您可以使用任何發行版並獲得類似的結果。觀察頂部的平均負載以及ab輸出中的每秒請求數行。
使用ab,我們將同時發送50(-c 50)個並發請求,並重複測試1000000次(由-n 1000000指示)。 Varnish 將返回更高的每秒請求數和更低的平均負載。
重要:請記住,Varnish 正在監聽埠 80(預設 HTTP 埠),而 Apache 正在監聽埠 8080。您還可以記錄完成每個測試所需的時間。
# ab -c 50 -n 100000 http://localhost/index.html
結論
在本文中,我們討論了如何在網頁伺服器(Varnish)前設置一個緩存,無論是Apache還是Nginx。請注意,我們並未深入探討default.vcl配置文件,該文件允許我們進一步自定義緩存策略。
您現在可能想參考官方文件以獲取進一步的配置示例,或者使用下面的表單留下評論。
Source:
https://www.tecmint.com/install-varnish-cache-server/