WordPress的varnish内存缓存方案
生活随笔
收集整理的這篇文章主要介紹了
WordPress的varnish内存缓存方案
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
安裝varnish
varnish官方下載地址
[root@VM-0-17-centos ~]# yum -y install varnish # 下載 [root@VM-0-17-centos ~]# systemctl start varnish [root@VM-0-17-centos ~]# systemctl enable varnish Created symlink from /etc/systemd/system/multi-user.target.wants/varnish.service to /usr/lib/systemd/system/varnish.service.# 配置varnish [root@VM-0-17-centos ~]# vim /etc/varnish/default.vcl vcl 4.0; import std;backend default {.host = "127.0.0.1";.port = "80"; }acl purger { "localhost"; "106.54.95.242"; }sub vcl_recv {if (client.ip != "127.0.0.1" && std.port(server.ip) == 80 && req.http.host ~ "^(?i)tianatian.icu") {set req.http.x-redir = "https://" + req.http.host + req.url;return(synth(850, "Moved permanently"));}if (req.method == "PURGE") {if (!client.ip ~ purger) {return(synth(405, "This IP is not allowed to send PURGE requests."));}return (purge);}if (req.restarts == 0) {if (req.http.X-Forwarded-For) {set req.http.X-Forwarded-For = client.ip;}}if (req.http.Authorization || req.method == "POST") {return (pass);}if (req.url ~ "/feed") {return (pass);}if (req.url ~ "wp-admin|wp-login") {return (pass);}set req.http.cookie = regsuball(req.http.cookie, "wp-settings-\d+=[^;]+(; )?", "");set req.http.cookie = regsuball(req.http.cookie, "wp-settings-time-\d+=[^;]+(; )?", "");if (req.http.cookie == "") {unset req.http.cookie;} }sub vcl_synth {if (resp.status == 850) { set resp.http.Location = req.http.x-redir; set resp.status = 302;return (deliver);} }sub vcl_purge {set req.method = "GET";set req.http.X-Purger = "Purged";return (restart); }sub vcl_backend_response {set beresp.ttl = 24h;set beresp.grace = 1h;if (bereq.url !~ "wp-admin|wp-login|product|cart|checkout|my-account|/?remove_item=") {unset beresp.http.set-cookie;} }sub vcl_deliver { if (req.http.X-Purger) { set resp.http.X-Purger = req.http.X-Purger;} }[root@VM-0-17-centos ~]# systemctl restart varnish # 重啟varnish服務(wù) [root@VM-0-17-centos ~]# ss -nutlp | grep 6081 tcp LISTEN 0 128 *:6081 *:* users:(("varnishd",pid=30299,fd=6)) tcp LISTEN 0 128 [::]:6081 [::]:* users:(("varnishd",pid=30299,fd=7))瀏覽器訪問查看
配置文件詳解
vcl 4.0; # 聲明版本號(hào) import std; # 引入std模塊backend default { .host = "127.0.0.1";.port = "80"; } # 該塊配置用于定義一臺(tái)Varnish默認(rèn)訪問的后端服務(wù)器,當(dāng)Varnish需要從后端服務(wù)器獲取數(shù)據(jù)時(shí),就會(huì)訪問自己的80端口。當(dāng)然Varnish也可以定義多臺(tái)后端服務(wù)器實(shí)現(xiàn)負(fù)載均衡的目的。.connect_timeout定義的是等待連接后端的時(shí)間,.first_byte_timeout定義的是等待從backend傳輸過來的第一個(gè)字節(jié)的時(shí)間,.between_bytes_timeout 定義的是兩個(gè)字節(jié)的間隔時(shí)間,當(dāng)然還可以增加一個(gè)backend,用于訪問本機(jī)的8090端口,假設(shè)通過該端口提供圖片服務(wù)acl purger { # 允許清理緩存的主機(jī) "localhost"; "106.54.95.242"; # 本機(jī)ip }# vcl_recv模塊:用于接收和處理請(qǐng)求。當(dāng)請(qǐng)求成功被調(diào)用后,Varnish通過判斷請(qǐng)求的數(shù)據(jù)來決定如何處理請(qǐng)求。此模塊一般以如下幾個(gè)關(guān)鍵字結(jié)束。pass:表示進(jìn)入pass模式,把請(qǐng)求交給vcl_pass模塊處理。pipe:表示進(jìn)入pipe模式,把請(qǐng)求交給vcl_pipe模塊處理。error code [reason]:表示把錯(cuò)誤標(biāo)識(shí)返回給客戶端,并放棄處理該請(qǐng)求。錯(cuò)誤標(biāo)識(shí)包括200、405等。"reason"是對(duì)錯(cuò)誤的提示信息。 sub vcl_recv { if (client.ip != "127.0.0.1" && std.port(server.ip) == 80 && req.http.host ~ "^(?i)tianatian.icu") {set req.http.x-redir = "https://" + req.http.host + req.url;return(synth(850, "Moved permanently"));}if (req.method == "PURGE") { # 定義刪除緩存的方法if (!client.ip ~ purger) {return(synth(405, "This IP is not allowed to send PURGE requests."));}return (purge);}if (req.restarts == 0) {if (req.http.X-Forwarded-For) { # 為發(fā)往后端主機(jī)的請(qǐng)求添加X-Forward-For首部set req.http.X-Forwarded-For = client.ip;}}if (req.http.Authorization || req.method == "POST") {return (pass);}if (req.url ~ "/feed") {return (pass);}if (req.url ~ "wp-admin|wp-login") {return (pass);}set req.http.cookie = regsuball(req.http.cookie, "wp-settings-\d+=[^;]+(; )?", "");set req.http.cookie = regsuball(req.http.cookie, "wp-settings-time-\d+=[^;]+(; )?", "");if (req.http.cookie == "") {unset req.http.cookie;} }sub vcl_synth {if (resp.status == 850) { set resp.http.Location = req.http.x-redir; set resp.status = 302;return (deliver);} }sub vcl_purge {set req.method = "GET";set req.http.X-Purger = "Purged";return (restart); }sub vcl_backend_response { # 定義緩存文件的緩存時(shí)長(zhǎng),即TTL值set beresp.ttl = 24h;set beresp.grace = 1h;if (bereq.url !~ "wp-admin|wp-login|product|cart|checkout|my-account|/?remove_item=") { # 定義帶Set-Cookie首部的后端響應(yīng)不緩存,直接返回給客戶端unset beresp.http.set-cookie;} }sub vcl_deliver { # 定義deliver 引擎 if (req.http.X-Purger) { set resp.http.X-Purger = req.http.X-Purger;} }總結(jié)
以上是生活随笔為你收集整理的WordPress的varnish内存缓存方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搭建WordPress个人网站
- 下一篇: 安装zabbix4.0+grafana