在varnish使用中会涉及代理多个后端域名(或网站)的情况,可通过判断请求的URL来设置对应backend即可解决问题。
以varnish官方文档中例子说明(https://www.varnish-cache.org/docs/trunk/reference/vcl.html#examples):
#后端服务器www backend www { .host = "www.example.com"; .port = "80"; } #后端服务器images backend images { .host = "images.example.com"; .port = "80"; } sub vcl_recv { #如果host为www.example.com,设置后端服务器为www,(?i)表示匹配模式为不区分大小写 if (req.http.host ~ "(?i)^(www.)?example.com$") { set req.http.host = "www.example.com"; set req.backend = www; #如果为images.example.com,设置后端服务器为images } elsif (req.http.host ~ "(?i)^images.example.com$") { set req.backend = images; } else { error 404 "Unknown virtual host"; } }
另外在vcl_hash函数中一定要加上
hash_data(req.http.host);