Varnish Cache 是一款免費、開源、現代且高性能的網絡應用加速器。它是一個快速的反向 HTTP 代理,通過將內容緩存到伺服器內存中,加快網絡服務器的性能。它被配置在一個源伺服器前運行,例如Apache(HTTPD)網絡伺服器。
當客戶端請求內容時,Varnish 接受HTTP請求,將請求發送到源伺服器,緩存返回的對象,並回復給客戶端請求。下一次客戶端請求相同內容時,Varnish 將從緩存中提供它。這樣,它減少了未來等效請求的響應時間和網絡帶寬消耗。
Varnish 還可作為HTTP請求路由器、網絡應用防火牆、負載平衡器等等。它使用靈活的Varnish 配置語言(VCL)進行配置,可通過Varnish 模塊(也稱為VMODs)進行擴展,支持Edge Side Includes(ESL)、Gzip 壓縮和解壓縮等等。
在本文中,您將學習如何在新的CentOS/RHEL 8 伺服器上安裝Apache HTTPD網絡伺服器和Varnish Cache 6,包括配置 Varnish 在HTTPD伺服器前運行。
先決條件:
- A server with CentOS 8 Installation
- A server with RHEL 8 installation with enabled Red Hat subscription on your system.
第一步:在CentOS/RHEL 8上安装Apache Web服务器
1.首先,使用DNF命令更新系统上安装的所有软件包,如下所示。
# dnf update
2.接下来,运行以下命令从AppStream存储库安装Apache HTTP Web服务器。
# dnf install httpd
3.安装完成后,启动httpd服务,使其在系统启动期间自动启动,并使用systemctl命令检查其状态以确认其正在运行。
# systemctl start httpd # systemctl enable httpd # systemctl status httpd

4.默认情况下,CentOS/RHEL 8包含一个完全锁定的防火墙(运行firewall-cmd –state进行确认)。您必须在防火墙中打开对HTTP服务的访问权限,以允许用户访问通过HTTP运行的网站或应用程序,并重新加载firewalld设置以应用新更改。
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --reload
第二步:在CentOS/RHEL 8上安装Varnish Cache 6.4
5.现在Apache Web服务器正在运行,您可以继续使用以下命令在系统上安装Varnish Cache。
# dnf module install varnish

6.成功安装后,您可以验证系统上安装的Varnish的版本。
# varnishd -V

7. 接下來,主要的執行檔被安裝為 /usr/sbin/varnishd。此外,Varnish 的設定檔存放在 /etc/varnish 目錄下,其中:
- /etc/varnish/default.vcl – 是使用 VCL 撰寫的主要 Varnish 設定檔。
- /etc/varnish/secret – 是 Varnish 密鑰檔。
8. 現在啟動 Varnish 服務,同時在系統重新啟動時自動啟動,並檢查其狀態以確保其運行正常,步驟如下。
# systemctl start varnish # systemctl enable varnish # systemctl status varnish

Step 3: 設定 Apache 與 Varnish Cache 一同運作
9. 現在是時候將 Varnish Cache 配置在 Apache 服務前運行了。默認情況下,Apache 伺服器配置為在端口 80 監聽,這在主配置檔 /etc/httpd/conf/httpd.conf 中定義。
使用您喜歡的文本編輯器打開它進行編輯。
# vi /etc/httpd/conf/httpd.conf
查找 Listen 參數。要在 Apache 伺服器前運行 Varnish,您應該將默認端口 80 更改為 8080(或您選擇的任何其他端口),如下圖所示。
稍後此端口將被添加為後端伺服器的端口在 Varnish 配置檔中。

此外,將通過 Varnish 提供服務的每個網站/應用程序的虛擬主機配置應配置為監聽上述端口。 以下是我們的測試站點的配置 (/etc/httpd/conf.d/tecmint.lan.conf)。
<VirtualHost *:8080> DocumentRoot "/var/www/html/tecmint.lan/" ServerName www.tecmint.lan # Other directives here </VirtualHost>

重要:要防止使用 Apache HTTP 服務器默認測試頁面,請註釋 /etc/httpd/conf.d/welcome.conf 文件中的所有行,或直接刪除該文件。
# rm /etc/httpd/conf.d/welcome.conf
10。 接下來,測試 httpd 配置語法是否有任何錯誤。如果正確,請重啟 httpd 服務以應用新更改。
# httpd -t # systemctl restart httpd

為 Systemd 配置 Varnish
11。 要將 Varnish 部署在 HTTPD 之前,您只需將其配置為在默認的 HTTP 端口 80 上監聽客戶端請求,如下所述即可。
請注意,在 Varnish Cache 6.0 及更高版本中,您必須在 systemd 的 Varnish 服務文件中設置 端口 varnish 服務器將監聽。首先,打開它進行編輯。
# systemctl edit --full varnish
找到 ExecStart 行,然後將 -a
開關(指定 varnish 監聽地址和端口)的值從 :6081
更改為 :80
,如下面的屏幕截圖所示。
重要提示:如果您沒有指定地址,varnishd 將監聽服務器上活動的所有 IPv4 和 IPv6 接口。
ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m

保存文件中的更改並退出。
配置Varnish后端服务器使用VCL
12。现在,您需要配置原始服务器,在Varnish术语中称为后端。这是理解HTTP的服务器,Varnish与之通信以获取内容-在这种情况下是httpd。它在主配置文件/etc/varnish/default.vcl中配置。
# vi /etc/varnish/default.vcl
有一个名为default的默认后端配置部分。您可以将“default”更改为server1(或者根据您的环境标准选择任何名称)。默认情况下,host参数指向localhost,假设后端服务器正在本地主机上运行。
然后将端口设置为8080(在Apache虚拟主机配置文件中定义的端口),如截图所示。
backend server1 { .host = "127.0.0.1"; .port = "8080"; }

如果您的后端服务器在不同的主机上运行,例如,另一台带有地址10.42.1.10的服务器,则host参数应指向此IP地址。
backend server1 { .host = "10.42.1.10"; .port = "8080"; }
保存文件并关闭。
13。在进行有关Varnish的所有必要更改之后,重新加载systemd管理器配置,以反映Varnish服务文件中的新更改,并重新启动Varnish服务以应用整体更改。
# systemctl daemon-reload # systemctl restart varnish
14. 在這一點上,Varnish 和 Apache 現在應該分別在端口 80 和 8080 上監聽。您可以使用 socket 統計命令 來確認這一點。
# ss -tpln

第 4 步:測試 Varnish Cache 和 Apache 設置
14. 為了測試 Varnish Cache-HTTPD 設置,打開網頁瀏覽器,並使用伺服器的 IP 或 FQDN 進行導航,如下截圖所示。
http://10.42.0.144 OR http://www.tecmin.lan
然後檢查網頁是否通過 Varnish Cache 提供。右鍵點擊顯示的網頁,選擇 檢查 以打開開發者工具,然後點擊 網絡 標籤,並重新加載頁面。然後選擇一個請求以查看 HTTP 標頭以確認這一點,如下截圖所示。

或者,您可以運行以下 curl 命令 來進行驗證。
# curl -I http:///10.42.0.144 OR #curl -I http:///www.tecmint.lan

有用的 Varnish Cache 實用程序
15. 讓我們通過查看一些有用的程序來結束這個指南,這些程序是 Varnish Cache 發行版附帶的。它們包括用於 varnish cache 管理、顯示詳細日誌記錄以及查看 varnish 性能統計信息的實用程序,如下所述。
varnishadm
首先是varnishadm,用於管理運行中的Varnish實例。它建立了與varnishd的命令行接口連接。它可以通過啟動和停止varnishd,更改配置參數,重新加載VCL,列出後端等來影響運行中的Varnish實例。
# varnishadm > backend.list

欲了解更多信息,請閱讀man varnishadm。
varnishlog
下一個程序是varnishlog,用於訪問特定請求的數據(即有關特定客戶端和請求的信息)。它提供大量信息,因此通常需要對其進行過濾。
# varnishlog

欲了解更多信息,請閱讀man varnishlog。
varnishstat
我們還有varnishstat(varnish統計),用於訪問整體統計信息,例如總請求數,對象數等。
# varnishstat

欲了解更多信息,請閱讀man varnishstat。
varnishtop
然後我們有varnishtop,它是一個實用程序,用於讀取Varnish日誌並呈現一個持續更新的最常出現的日誌項目列表。
# varnishtop

欲了解更多信息,請閱讀man varnishtop。
varnishhist
varnishhist (varnish history) 工具讀取 Varnish 日誌並呈現一個連續更新的直方圖,顯示最後 N 個請求的處理分佈。
# varnishhist

欲獲得更多資訊,請閱讀 man varnishhist。
就是這樣!您已成功部署了 Varnish Cache 以加速使用 Apache HTTP 伺服器在 CentOS/RHEL 8 上提供的網頁應用程式內容。
如果您對此主題有任何疑問或想法要分享,請使用下方的反饋表格。查看 Varnish Cache 6.0 文件 獲取更多資訊。
如果您想要在您的網站上啟用 HTTPS,請查看我們的下一篇文章,將顯示如何在 CentOS/RHEL 8 上使用 Hitch 為 Varnish Cache 啟用 SSL/TLS。
Source:
https://www.tecmint.com/install-varnish-cache-for-apache-on-centos-rhel-8/