標籤:apache nginx varnish httpd php.wordpress
由於一個web網站的程式的訪問具有局部性特徵:時間上的局部性:一個資料被訪問過之後,可能很快會被再次訪問到;空間局部性:一個資料被訪問時,其周邊的資料也有可能被訪問到;varnish可將這部分資料緩衝下來.
緩衝的資料存在被訪問較頻繁的資料可以稱其為熱區:緩衝同樣存在局部性;時效性:如果緩衝空間耗盡:則採用LRU,最近最少使用演算法;將到期的緩衝清理掉
varnish的基本工作原理:
Varnish通過類似於HTPP反向 Proxy的方式將可以用來緩衝的資料緩衝下來直接響應給用戶端的快取資料,如果緩衝中
沒有相應的資料,它將會把請求指向後端機器,擷取響應的資料進行響應用戶端。
當varnish有緩衝的時候響應通常只需要極短的時間,比直接存取後端機器通常要快幾個量級,所以要儘可能的將可快取的頁面緩衝到varnish中。
varnish工作模式圖:
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M01/9A/A3/wKiom1lY4Prj5ZoeAABT40sH6oY379.png" title="捕獲.PNG" alt="wKiom1lY4Prj5ZoeAABT40sH6oY379.png" />
varnish的處理機製圖:
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M02/9A/A3/wKiom1lY4UPCRsMWAAYYShK1BV8578.jpg-wh_500x0-wm_3-wmp_4-s_3429070054.jpg" title="30212356_146129273143JH.jpg" alt="wKiom1lY4UPCRsMWAAYYShK1BV8578.jpg-wh_50" />
哪些資料可以緩衝或是不可緩衝:1.盡量將網站公用的資料緩衝下來;2.用排除使用者的私人資料.
配置一個wordperss網站使用varnish快取服務器並做動靜分離
基礎拓撲圖:
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M02/9A/A3/wKioL1lY4WeBqB0LAAB1ycfFd5o851.png" title="varnish基礎.PNG" alt="wKioL1lY4WeBqB0LAAB1ycfFd5o851.png" />
varnish的配置(基於cenots7,整個配置過程應避免iptables和selinux的影響):
ntpdata 172.16.0.1 同步時間
安裝varnish程式:
yum install varnish
編輯varnish的主設定檔:
vim /etc/varnish/varnish.params 添加最後一行: DAEMON_OPTS="-p thread_pools=3 -p thread_pool_min=5 -p thread_pool_max=1000 -p thread_pool_timeout=300"
啟動varnish程式:
systemctl restart varnish
編輯varnish的vcl設定檔:
vim /etc/varnish/default.vcl
作出如下基礎配置:
vcl 4.0;# Default backend definition. Set this to point to your content server.backend default { #定義後端動態主機(apm) .host = "192.168.5.109"; .port = "80";}backend nginxsrvs { #定義後端靜態主機(nignx) .host = "192.168.5.108"; .port = "80";}sub vcl_recv { # Happens before we check if we have this in cache already. # # Typically you clean up the request here, removing cookies you don‘t need, # rewriting the request, etc. if (req.method == "PURGE") { #指明何時可以用PURGE請求裁剪快取資料 return(purge);} if (req.url ~ "(?i)^/(login|admin)") { #指定一些私用資料不尋找快取資料 return(pass); } if (req.url ~ "(?i)\.(html|htm|css|svg|js|jpg|jpeg|png|gif|pdf)") { #指定的內容由靜態伺服器響應,其他的為動態伺服器響應 set req.backend_hint = nginxsrvs; #指明響應的後端主機 } else { set req.backend_hint = default; #指明響應的前端主機 }}sub vcl_purge { return (synth(200,"Purged")); #指明可以執行的PURGE操作}sub vcl_deliver { if (obj.hits>0) { #可以用來做緩衝是否被命中,obj.hits用於統計快取命中的次數 set resp.http.X-Cache = "HIT via " + server.ip; } else { set resp.http.X-Cache = "Miss via " + server.ip; }
將default.vcl檔案編譯載入至varnish程式:
varnishadm -S secret 進入varnish配置的cli介面,執行編譯載入: vcl.load test1 default.vcl #編譯 vcl.use test1 #載入 quit #退出
配置apm動態伺服器:
yum install httpdmkdir -p /apps/data (需要考慮許可權)
將wordpress的源碼檔案cp至目錄下
編輯httpd的網站設定檔
vim /etc/httpd/conf.d/wordpress.conf
<VirtualHost *:80> DirectoryIndex index.php index.html ServerName www.abc.com DocumentRoot /apps/data/wordpress <Directory "/apps/data/"> Options FollowSymLinks AllowOverride None Require all granted </Directory></VirtualHost>
啟動httpd程式:
systemctl restart httpd
配置nfs服務用於共用網站檔案
yum install nfs-utilsvim /etc/exports/apps/data *(rw,all_squash,anonuid=48)
配置nginx靜態伺服器:
yum install nginx #這裡要用到nginx官方提供的yum源
配置/etc/nginx/conf.d/default.conf檔案,作出如下修改
vim /etc/nginx/conf.d/default.conflocation / { root /apps/data/wordpress; #指明web程式的路徑 index index.html index.htm;}
啟動nginx服務程式
systemctl restart nginx
更改hosts檔案即可做訪問測試.
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M01/9A/A3/wKiom1lY4xDBVUKOAAYFqcw1XUI122.png-wh_500x0-wm_3-wmp_4-s_3694132590.png" title="abc.PNG" alt="wKiom1lY4xDBVUKOAAYFqcw1XUI122.png-wh_50" />
varnish的基礎配置實現已完成.
本文出自 “老城小敘” 部落格,請務必保留此出處http://cityx.blog.51cto.com/9857477/1943841
Varnish基礎配置實現動靜分離web網站