www.pilishen.com/posts/speed…css
假設你用PHP和nginx搭建了本身的一個博客,這很棒。從服務器角度,每當有人訪問了你的文章頁面時,你的網站就會作一系列的、重複的任務,好比說獲取一個幾乎不怎麼變化的文章內容。html
假設訪客A訪問了這個文章頁面,文章內容從數據庫裏獲取了,包括圖片、css、js等,都要從服務器加以獲取。當訪客B, C, D等訪問了這一樣一個沒有作過內容改動的文章,一樣的內容就會被服務器重複地獲取,每次都要訪問數據庫,都要去找圖片、css、js那些。linux
如今假設一天裏那個頁面有1,000,000 訪問者,那麼你的服務器就得處理1,000,000次訪問,去供應那麼多的資源,處理那麼多的數據庫查詢,最終你的站點就會愈來愈慢,甚至中止響應,當服務器用光了工做進程或者鏈接的時候。nginx
要避免這種狀況,你就須要用上Varnish了。laravel
在進行下面的測試以前,你須要先有個linux系統,固然能夠是本地的虛擬機,好比咱們的vagrant homestead,也能夠是線上服務器,固然若是是生產服務器,就須要提醒你特別當心咯。這裏的測試用的是ubuntu,其它linux版本的細小差別在此不作贅述。web
其次呢,你的這個服務器上最好有個nginx站點能夠用來測試,固然了,用任何一個你的本地開發站點來測試就行了。數據庫
在繼續進行以前,你能夠用http-header-checker工具來查看一下你的站點,能夠獲得相似信息:ubuntu
固然了,你也能夠用任何喜歡的工具來查看header,這裏咱們varnish尚未運行,因此就看不到一個 「X-Varnish」的header,這個header暗示着當前網站是跑在varnish後面的。後端
再簡單不過了緩存
sudo apt-get install -y varnish
複製代碼
就行了,安裝完之後,能夠在下面兩個目錄裏找到相應配置文件:
默認呢,varnish監聽的是6081端口,但咱們的網站通常是在80端口,因此咱們得改一下。
固然了,改以前,你能夠用你的網站ip訪問一下6081 端口,能夠看到相似的varnish報錯頁面:
首先呢,咱們改一下nginx的站點配置,讓它再也不使用80端口,以免端口衝突。這裏個人測試站點配置文件在/etc/nginx/sites-available/default
裏,你能夠相應更改你本身的nginx配置:
server {
listen 8080 default_server;
listen [::]:8080 default_server;
# Leave the other configuration items intact...
}
複製代碼
咱們讓nginx站點默認監聽8080端口,如今記得從新加載一下nginx好讓配置生效:sudo service nginx reload
,而後你再用ip或站點域名去訪問8080端口,應該還能看見以前的測試站點頁面。
接下來該更改varnish配置了,找到這個文件:/etc/default/varnish
## Alternative 2, Configuration with VCL
#
# Listen on port 6081, administration on localhost:6082, and forward to
# one content server selected by the vcl file, based on the request.
#
DAEMON_OPTS="-a :6081 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ -s malloc,256m"
複製代碼
將其中的-a :6081
更改爲 -a :80
,這樣呢就將varnish的前臺監聽端口設置到80端口了。
接下來呢,還要讓varnish的後臺去監聽一下咱們的站點,畢竟它要替咱們從nginx站點裏拉取內容,加以緩存,而後返回給前臺。這個時候找到/etc/varnish/default.vcl
這個配置文件
# Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "8080";
}
複製代碼
能夠看到默認的varnish後端,監聽的就是咱們的本地主機,並且端口就是8080,也即它可以從咱們8080的nginx站點拉取內容。因此這裏咱們不須要更改什麼,確認一下就行了。
接下來咱們須要將varnish.service
這個文件添加到系統服務中,這樣咱們能夠用systemd 相關命令來在80端口開啓varnish服務
$ sudo cp /lib/systemd/system/varnish.service /etc/systemd/system/
$ sudo nano /etc/systemd/system/varnish.service
複製代碼
上面,咱們將varnish.service
服務文件拷貝到了系統服務目錄下,而後第二個命令是打開這個服務文件,默認是這樣的:
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
複製代碼
一樣的,將裏面-F -a :6081
改爲-F -a :80
,裏面的localhost:6082
不用動,保存退出,而後執行下面的一系列命令,來從新加載一下系統服務,重啓varnish和nginx:
$ sudo systemctl daemon-reload
$ sudo systemctl reload varnish.service
$ sudo service varnish restart
$ sudo service nginx restart
複製代碼
{id="performance"}
這個時候再訪問咱們的站點,檢查header部分,應該能看到相似結果:
能夠看到多了幾個header:X-Varnish
,Age
和 Via
,這些是varnish引入進來的,說明咱們的varnish在運行了。
這個時候你再訪問你的站點,你會發現,第一次訪問事後,接下來的頁面訪問都會極其極其地快。固然這也取決於你的站點設置,若是你某個頁面明確設置了不能緩存的Cache-Control header,那麼默認varnish就不給你緩存這個頁面,固然這些後期均可以具體更改調試。
那麼正常狀況下,你在開發者工具欄裏會看到以下的性能表現:
能夠看到傳輸數據很小,後面的資源直接從cache中加載,不須要請求時間了。
{id="concolusion"}
Varnish是一個很偉大的開源緩存軟件,使用恰當的話可讓你的網站極其、極其地快。固然了,緩存層永遠是一把雙刃劍,若是你使用不恰當,也會搞亂不少東西,讓你茫然不知所措。Varnish呢既然是個強大的緩存代理軟件,它確定也就不僅僅咱們上面展現的那麼簡單,是,你能夠上面那樣默認安裝配置,就已經能給你帶來很多性能提高,可是你要是想真正掌握好它,想真正發揮它的強大之處,那這些確定是遠遠不夠的,這裏呢咱們只是讓你們初步體驗,感覺一下,便於進一步進階。
想深刻了解varnish的原理和機制,用最短的時間成爲varnish高手,讓你的生產環境的站點儘快體驗上varnish,這裏進一步推薦的資源就是咱們的《【laravel國際會議】使用Varnish來構建應用「緩存層」和負載均衡》,這個是在laravel的國際會議laracon上,咱們的主講嘉賓Mattias分享了varnish相關的方方面面,讓本來複雜恐怖的varnish緩存層,一會兒變得簡單和可操做起來。
固然了,更多的,請自行學習這個專場吧,別擔憂,雖然是英文大佬,可是咱們都給你靜心翻譯,帶上中文字幕了。
《【laravel國際會議】使用Varnish來構建應用「緩存層」和負載均衡》
末了,歡迎到個人站點https://www.pilishen.com/來作客哦,也歡迎加入咱們的公開羣【公開課@pilishen.com】:109256050,等你哦~