WordPress的varnish内存缓存方案

安装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服务
[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;                  # 声明版本号
import std;               # 引入std模块

backend default {         
 .host = "127.0.0.1";
 .port = "80";
}                        # 该块配置用于定义一台Varnish默认访问的后端服务器,当Varnish需要从后端服务器获取数据时,就会访问自己的80端口。当然Varnish也可以定义多台后端服务器实现负载均衡的目的。.connect_timeout定义的是等待连接后端的时间,.first_byte_timeout定义的是等待从backend传输过来的第一个字节的时间,.between_bytes_timeout 定义的是两个字节的间隔时间,当然还可以增加一个backend,用于访问本机的8090端口,假设通过该端口提供图片服务

acl purger {            # 允许清理缓存的主机
"localhost";
"106.54.95.242";        # 本机ip
}


# vcl_recv模块:用于接收和处理请求。当请求成功被调用后,Varnish通过判断请求的数据来决定如何处理请求。此模块一般以如下几个关键字结束。pass:表示进入pass模式,把请求交给vcl_pass模块处理。pipe:表示进入pipe模式,把请求交给vcl_pipe模块处理。error code [reason]:表示把错误标识返回给客户端,并放弃处理该请求。错误标识包括200、405等。"reason"是对错误的提示信息。
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) {                    # 为发往后端主机的请求添加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 {                # 定义缓存文件的缓存时长,即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首部的后端响应不缓存,直接返回给客户端
 unset beresp.http.set-cookie;
 }
}

sub vcl_deliver {                            #  定义deliver 引擎
if (req.http.X-Purger) {
set resp.http.X-Purger = req.http.X-Purger;
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值