核心要點
/etc/default/varnish
和 /lib/systemd/system/varnish.service
中的默認端口替換為 80。然後,必須重啟 Varnish 和 Nginx 以使更改生效。 本文是關於構建示例應用程序(多圖像畫廊博客)以進行性能基準測試和優化的系列文章的一部分。 (在此處查看存儲庫。)
正如本報告所示,我們網站的登錄頁面加載速度非常快,總體得分也很好,但它可以使用另一層緩存,甚至可以使用 CDN 來真正獲得良好的性能。
要了解有關 GTMetrix 和其他可用於衡量和調試性能的工具的更多信息,請參閱《改進頁面加載性能:Pingdom、YSlow 和 GTmetrix》。
讓我們利用我們在之前的 Varnish 文章中學習到的知識,以及在《CDN 簡介》和《Cloudflare 簡介》文章中獲得的知識,來真正調整我們的服務器內容交付。
Varnish
Varnish 的創建目的僅僅是為了成為常規服務器前的一種超級緩存。
注意:鑑於 Nginx 本身就是一個相當不錯的服務器,人們通常會選擇其中一個,而不是兩者都選擇。同時擁有兩者並沒有什麼壞處,但是必須警惕可能發生的緩存失效問題。必須正確設置兩者,以便其中一個的緩存不會在另一個緩存更新時保持陳舊。這可能導致向不同的訪問者顯示不同的內容。設置此項超出了本文的範圍,將在未來的指南中介紹。
我們可以通過執行以下操作來安裝 Varnish:
<code>curl -L https://packagecloud.io/varnishcache/varnish5/gpgkey | sudo apt-key add - sudo apt-get update sudo apt-get install -y apt-transport-https</code>
Ubuntu 的當前存儲庫列表中沒有 Varnish 5 ,因此需要額外的存儲庫。如果文件 /etc/apt/sources.list.d/varnishcache_varnish5.list
不存在,請創建它。向其中添加以下內容:
<code>deb https://packagecloud.io/varnishcache/varnish5/ubuntu/ xenial main deb-src https://packagecloud.io/varnishcache/varnish5/ubuntu/ xenial main</code>
然後,運行:
<code>curl -L https://packagecloud.io/varnishcache/varnish5/gpgkey | sudo apt-key add - sudo apt-get update sudo apt-get install -y apt-transport-https</code>
結果應類似於:
<code>deb https://packagecloud.io/varnishcache/varnish5/ubuntu/ xenial main deb-src https://packagecloud.io/varnishcache/varnish5/ubuntu/ xenial main</code>
然後,我們將服務器的默認端口更改為 8080。我們這樣做是因為 Varnish 將位於 80 端口上,並根據需要將請求轉發到 8080。如果您按照本系列開頭部分的說明在 Homestead Improved 上進行本地開發,則需要編輯的文件位於 /etc/nginx/sites-available/homestead.app
中。否則,它可能位於 /etc/nginx/sites-available/default
中。
<code>sudo apt-get update sudo apt-get install varnish varnishd -V</code>
接下來,我們將通過編輯 /etc/default/varnish
並將第一行(6081)上的默認端口替換為 80 來配置 Varnish 本身:
<code>$ varnishd -V varnishd (varnish-5.2.1 revision 67e562482) Copyright (c) 2006 Verdens Gang AS Copyright (c) 2006-2015 Varnish Software AS</code>
在 /lib/systemd/system/varnish.service
中也需要執行相同的操作:
<code>server { listen 8080 default_server; listen [::]:8080 default_server ipv6only=on;</code>
最後,我們可以重新啟動 Varnish 和 Nginx 以使更改生效:
<code>DAEMON_OPTS="-a :80 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ -s malloc,256m"</code>
最後一個命令是為了使先前編輯的 varnish.service 守護程序設置也重新加載,否則它只會考慮 /etc/default/varnish
文件的更改。由於當前存在一個錯誤,除非這樣做,否則 Varnish 不會正確釋放端口,因此需要啟動 停止過程。
將結果與之前的結果進行比較,我們可以看到由於登錄頁面已經經過了極度優化,因此差異很小。
兩個低分主要是因為我們“沒有從一致的 URL 提供服務”,正如 GTMetrix 所說:
發生這種情況是因為我們使用隨機圖像來填充我們的畫廊,並且隨機樣本很小,因此其中一些圖像重複出現。這很好,在網站投入生產後不會成為問題。事實上,這是極少數情況下,網站在生產中的默認得分會比在開發中更好。
Cloudflare
接下來,讓我們設置 Cloudflare。首先,我們註冊一個帳戶:
因為 Cloudflare 需要應用一些 DNS 設置,因此需要將域名附加到 IP 地址(即,無法像我們目前在測試中那樣只使用目標服務器的 IP 地址),所以我們應該為此目的註冊一個演示域名。我目前可以使用我的舊域名 caimeo.com,但首先,需要使用 A 記錄將域名連接到 DigitalOcean droplet 的 IP 地址:
然後,Cloudflare 將掃描並複制這些現有記錄,如果您們的系統未能識別所有記錄,則允許您添加任何缺少的記錄。
在此過程結束時,需要更新原始註冊商處的域名名稱服務器,以便它們指向 Cloudflare 的名稱服務器。此時,Cloudflare 將完全為您控制您的域名(儘管可能需要長達 24 小時才能傳播到所有可能的訪問者)。
您可以使用 Cloudflare 儀表板查看帳戶級別和應用於給定域名的設置。
服務激活後,我們可以將新的 GTMetrix 結果與舊結果進行比較。
雖然 YSlow 現在更喜歡我們 6%,但似乎我們還可以做更多的事情,因為 Cloudflare 集成顯然使我們的網站速度降低了 23%。
首先,讓我們嘗試打開自動壓縮(在 Cloudflare 儀表板中的“速度”下)並完全清除緩存(在“緩存”下)。然後,在比較之前,我們將運行測試幾次,以便緩存正確預熱。
好多了!幾次額外的測試運行可能會使它更接近原始的 1.4 秒加載時間,但讓我們也看看 CloudFlare 的 Rocket Loader 工具。它處於測試階段,通過捆綁在一起它可以找到的所有 JavaScript(甚至外部文件)並異步加載這些文件來工作。然後,它在瀏覽器中本地緩存這些資源,而不是從遠程服務器重新獲取它們。此處進行比較。
遺憾的是,這不太理想。 YSlow 更喜歡我們,因為我們的壓縮效果更好,請求更少,但這些工具似乎正在錯誤地配置以前工作得更好的某些設置。讓我們將其關閉並清除緩存,之前的設置更好。
其他可能的調整
添加 favicon 總是一個好主意——更少的 404 請求,並且在瀏覽器中看起來更好。此外,瀑布圖清楚地告訴我們,大約 330 毫秒的 1.6 秒用於等待 favicon!
成功!添加 favicon 後,我們又減少了 300 毫秒。
您可能在跳過 Nginx 優化之後才來到這篇文章。建議您也應用其中的技巧。這篇文章中執行的調整實際上已應用於網站的實時版本,因此應用於與該文章中不同的服務器。此處協同調整的 Varnish 和 Nginx 會產生更好的結果:
<code>curl -L https://packagecloud.io/varnishcache/varnish5/gpgkey | sudo apt-key add - sudo apt-get update sudo apt-get install -y apt-transport-https</code>
考慮使用 Varnish 激活 HTTP/2。在瀑布圖中看到這些阻塞行嗎?
這是因為它們一次加載幾個,而其他文件則等待前面的文件加載完畢。使用 HTTP/2,此問題將消失,並且整個網站加載速度更快,通過相同的連接下載多個文件。一個警告是該網站需要證書。如今,使用 Let's Encrypt 非常容易實現。另一個警告是您需要使用包含 HTTP/2 模塊的 Nginx 重新構建,因此需要在服務器上進行一些調整。另一個警告是 Varnish 對 HTTP/2 的支持仍處於測試階段,可能不應該過於依賴。
要了解如何配置 Varnish 和 HTTP/2,請參閱本教程。
結論
我們將 Varnish 作為額外的緩存層,並將 Cloudflare 的免費計劃作為我們的 CDN,從而顯著提高了我們的 GTMetrix 得分。雖然我們的優化過程對於如此簡單的應用程序來說可能有點過分,但從第一天起就知道我們的應用程序能夠處理每秒數十萬用戶而不會崩潰,所有這些都在一台10 美元的服務器上,這非常令人放心。
如果我們錯過了任何步驟,並且您認識到我們可以做的其他性能技巧,請告訴我們!
使用 Varnish 和 Cloudflare 進行最大緩存的常見問題解答 (FAQ)
使用 Varnish 和 Cloudflare 結合使用的主要好處是最大限度地提高網站的緩存能力。 Varnish 是一個強大的緩存 HTTP 反向代理,可以將網站速度提高高達 1000%,而 Cloudflare 是一個全球分佈的代理服務器網絡,可以為您的網站提供性能和安全性。結合使用時,它們可以顯著提高網站的加載速度、增強用戶體驗並提高您的搜索引擎優化排名。
Varnish 通過緩存網站的靜態內容並將其提供給訪問者來與 Cloudflare 協同工作。當訪問者請求頁面時,Varnish 會檢查它是否具有該頁面的緩存版本。如果有,它會將緩存頁面提供給訪問者。如果沒有,它會從服務器獲取頁面,將其緩存,然後將其提供給訪問者。另一方面,Cloudflare 充當訪問者和 Varnish 之間的反向代理。它提供額外的緩存功能並保護您的網站免受惡意流量的攻擊。
雖然 Cloudflare 提供緩存功能,但它不能直接替代 Varnish Cache。 Varnish Cache 是一個強大的 HTTP 加速器,專為內容豐富的動態網站而設計。它非常靈活,可以根據您的特定需求進行定制。另一方面,Cloudflare 是一種 CDN 服務,提供一系列服務,包括緩存,但它不如 Varnish 可定制。因此,兩者結合使用可以獲得最佳效果。
將 Cloudflare 與 Varnish 配合使用需要多個步驟。首先,您需要在服務器上安裝和配置 Varnish。然後,您需要設置 Cloudflare 以與 Varnish 配合使用。這包括更改您的 DNS 設置以指向 Cloudflare,以及配置 Cloudflare 以緩存您的網站內容並將流量傳遞給 Varnish。
Turpentine 是一個 Magento 擴展,可提高 Magento 和 Varnish 之間的兼容性。它為 Magento 商店提供更強大、更靈活的緩存解決方案。雖然它與 Cloudflare 沒有直接關係,但將 Turpentine 與 Varnish 結合使用可以增強 Magento 商店的性能,並且 Cloudflare 可以進一步提升這種性能。
Cloudflare 的頁面規則允許您控制 Cloudflare 如何處理網站的不同部分。您可以使用這些規則來增強 Varnish 的緩存能力。例如,您可以創建一個規則來繞過 Cloudflare 對某些頁面的緩存,允許 Varnish 處理這些頁面的緩存。
是的,您可以將 Varnish 和 Cloudflare 用於 WordPress 網站。 Varnish 和 Cloudflare 都與 WordPress 兼容,可以顯著提高 WordPress 網站的性能。
使用 Varnish 和 Cloudflare 會對搜索引擎優化產生積極影響。通過提高網站的加載速度,它們可以增強用戶體驗並提高您的搜索引擎優化排名。 Google 已指出,網站速度是其算法用於對頁面進行排名的信號之一。
結合使用 Varnish 和 Cloudflare 時,一個潛在的問題是可能出現雙重緩存,即 Varnish 和 Cloudflare 都緩存相同的內容。這可能導致向訪問者提供過時的內容。為避免這種情況,您需要仔細配置 Varnish 和 Cloudflare,以確保它們能夠有效地協同工作。
對 Varnish 和 Cloudflare 的問題進行故障排除涉及檢查兩項服務的配置、檢查服務器日誌以及使用 varnishlog 和 varnishstat 等工具。如果您仍然遇到問題,可以尋求 Varnish 和 Cloudflare 社區的幫助或聯繫他們的支持團隊。
以上是如何使用清漆和Cloudflare最大緩存的詳細內容。更多資訊請關注PHP中文網其他相關文章!