如何解读并应用Sens杨注释的Varnish配置文件?

avatar
作者
猴君
阅读量:0
Varnish 配置文件分享(sens杨注释):,,``plaintext,# 导入默认VCL配置,import std;,,# 定义后端服务器,backend default {, .host = "127.0.0.1";, .port = "8080";,},,# 健康检查设置,probe sh http_200 {, .url = "/healthcheck";, .interval = 5s;, .timeout = 1s;, .window = 5;, .threshold = 3;,},,# 定义子路由规则,sub vcl_recv {, if (req.http.X-Forwarded-For) {, // 添加客户端真实IP, set req.http.X-Real-IP = req.http.X-Forwarded-For;, } else {, set req.http.X-Real-IP = client.ip;, },, if (req.method == "PURGE") {, // 清理缓存, if (client.ip ~ purge) {, return(lookup);, }, error 405 "Not allowed.";, },, // 静态资源缓存策略, if (req.url ~ "^/static/") {, unset req.http.Cookie;, },, // 压缩响应内容, if (req.http.Accept-Encoding) {, set req.http.Accept-Encoding = "gzip, deflate";, },},,sub vcl_hit {, if (obj.ttl >= 0s) {, set obj.ttl = 1h;, }, return (deliver);,},,sub vcl_miss {, set obj.http.Cache-Control = "max-age=0, no-cache, no-store";, set obj.http.X-Content-Type-Options = "nosniff";, set obj.http.X-Frame-Options = "SAMEORIGIN";, set obj.http.X-XSS-Protection = "1; mode=block";, return (fetch);,},,sub vcl_fetch {, set beresp.http.X-Content-Type-Options = "nosniff";, set beresp.http.X-Frame-Options = "SAMEORIGIN";, set beresp.http.X-XSS-Protection = "1; mode=block";, if (!beresp.http.Cache-Control) {, set beresp.http.Cache-Control = "public, max-age=3600";, }, if (beresp.status == 404 || beresp.status == 403) {, set beresp.ttl = 5m;, return (deliver);, }, if (beresp.http.Set-Cookie) {, set beresp.http.X-Cookie-Flag = "1";, } else {, unset beresp.http.X-Cookie-Flag;, },},,sub vcl_deliver {, if (obj.http.X-Cookie-Flag) {, set resp.http.Cache-Control = "private, no-store";, set resp.http.Pragma = "no-cache";, } else {, set resp.http.Cache-Control = "public, max-age=3600";, }, if (obj.http.X-Content-Type-Options) {, set resp.http.X-Content-Type-Options = obj.http.X-Content-Type-Options;, }, if (obj.http.X-Frame-Options) {, set resp.http.X-Frame-Options = obj.http.X-Frame-Options;, }, if (obj.http.X-XSS-Protection) {, set resp.http.X-XSS-Protection = obj.http.X-XSS-Protection;, },},``

Varnish 配置文件分享(sens杨 注释)

Varnish是一款高性能的HTTP缓存代理服务器,广泛应用于加速网站性能,由于其复杂的配置和有限的中文文档,许多用户在配置过程中遇到困难,本文将基于Varnish专家sens杨的配置文件解读,帮助大家更好地理解和优化Varnish的配置。

如何解读并应用Sens杨注释的Varnish配置文件?

关键配置项详解

后端服务器(Backend)定义

 backend default {     .host = "127.0.0.1";     .port = "8008";     .connect_timeout = 600s;     .first_byte_timeout = 600s;     .between_bytes_timeout = 600s; } backend lighttpd {     .host = "127.0.0.1";     .port = "81";     .connect_timeout = 600s;     .first_byte_timeout = 600s;     .between_bytes_timeout = 600s; }

.host:指定后端服务器的主机地址,通常为本地服务器。

.port:指定后端服务器的端口号。

.connect_timeout:连接超时时间,建议设置为较长时间以确保在网络延迟时不会过早断开。

.first_byte_timeout:等待第一个字节的时间,同样建议较长时间以适应后端响应缓慢的情况。

.between_bytes_timeout:两个字节间的超时时间,确保数据传输的稳定性。

访问控制列表(ACL)

 acl techmission_internal {     "localhost";     "127.0.0.1"; }

acl:定义一个访问控制列表,用于限制或允许特定IP地址的访问。

techmission_internal:自定义的访问控制列表名称,可以根据需要调整。

"localhost""127.0.0.1":允许这些IP地址访问。

接收请求处理(sub vcl_recv)

 sub vcl_recv {     // 如果后端数据滞后,允许为“过时”数据提供一个宽松期     set req.grace = 5m;     // 阻止非自己说测试网站(的数据访问)     if ((req.http.host ~ "www\.domain1.org|www\.domain2.org") && !(client.ip ~ techmission_internal) && !(req.url ~ "^/ad|^/files")) {         error 403 "Forbidden";     }     if ((req.url ~ "/server-status" || req.url ~ "/whm-server-status") && !(client.ip ~ techmission_internal)) {         error 404 "Not Found";     }     // 增加ping URL测试varnish状态     if (req.request == "GET" && req.url ~ "/varnish-ping") {         error 200 "OK";     }     // 使host头规范化,以减少在cache中变化     if (req.http.host == "domain.org" && req.url !~ "^/blogs") {         set req.http.host = "www.domain.org";     }     // 规范化Accept-Encoding以减少Vary: Accept-Encoding影响     if (req.http.Accept-Encoding) {         if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {             // 不要压缩已经压缩的文件             remove req.http.Accept-Encoding;         } elsif (req.http.Accept-Encoding ~ "gzip") {             set req.http.Accept-Encoding = "gzip";         } elsif (req.http.Accept-Encoding ~ "deflate") {             set req.http.Accept-Encoding = "deflate";         } else {             // unknown algorithm             remove req.http.Accept-Encoding;         }     }     // 删除has_js和谷歌统计__*的cookies,同时删除collapsiblock cookies     set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(has_js|Google Analytics)[^\s;]*",""); }

set req.grace:设置宽松期,允许在后端数据滞后时提供过期数据。

error 403 "Forbidden"error 404 "Not Found":用于阻止未授权的访问和隐藏特定URL。

error 200 "OK":用于测试Varnish状态。

set req.http.host:规范化Host头,减少缓存变化。

remove req.http.Accept-Encoding:处理不同编码格式,避免不必要的压缩。

set req.http.Cookie:删除不必要的cookies,优化缓存效果。

相关问题与解答

1、为什么需要设置req.grace

答:设置req.grace 是为了在后端数据滞后时,能够提供过期(stale)数据,从而保证用户体验不受影响,这对于高并发和高延迟的网络环境尤为重要。

2、如何通过Varnish配置文件实现负载均衡?

答:要实现负载均衡,可以在Varnish配置文件中定义多个后端服务器,并使用负载均衡算法(如轮询、最少连接数等)进行分配。

```vcl

backend server1 {

.host = "192.168.1.1";

.port = "8080";

}

backend server2 {

.host = "192.168.1.2";

.port = "8080";

}

```

然后在sub vcl_recv 中使用hash 或其他算法选择后端服务器:

```vcl

set req.backend_hint = server1; // 根据业务逻辑选择后端服务器

```

以上内容就是解答有关“varnish 配置文件分享(sens杨 注释)”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!