上次发过一个varnish的配置文件,在测试环境下调试后,有了不少的修改,所以从新传了一份,看了我之前画得那个流程图的话应该还是很容易理解的吧!嘿嘿
- #这个是varnish的VCL配置文件,保存于DIR/varnish/etc/varnish/目录中。主要用于定义varnish接到请求后的处理方式和请求的方向。
- #定义后台服务器
- backend web01{
- .host = "192.168.10.239"; #后台服务器的IP
- .port = "80"; #端口
- .connect_timeout = 1s; #连接超时时间
- .first_byte_timeout = 5s; #
- .between_bytes_timeout = 2s; #两次对服务器请求的间隔时间
- .probe = { #定义对后台服务器的探针检测
- .url = "/"; #检测的路径
- .timeout = 0.3s; #检测超时时间
- .window = 8;
- .threshold = 3;
- .initial = 3;
- }
- }
- backend web02{
- .host = "192.168.10.243";
- .port = "80";
- .connect_timeout = 1s;
- .first_byte_timeout = 5s;
- .between_bytes_timeout = 2s;
- .probe = {
- .url = "/";
- .timeout = 0.3s;
- .window = 8;
- .threshold = 3;
- .initial = 3;
- }
- }
- #定义后台服务器组,并利用Round-Robin方式进行轮询。
- director load round-robin {
- {
- .backend = web01;
- }
- {
- .backend = web02;
- }
- }
- #定义可以对varnish缓存进行清理的用户
- acl purge{
- "localhost";
- }
- sub vcl_recv{
- if (req.request == "PURGE"){
- if (!client.ip ~ purge){
- error 405 "Not allowed.";
- }
- return (lookup);
- }
- if (req.http.host ~ "192.168.10.245"){
- set req.backend = load;
- }
- if (req.restarts == 0){
- if (req.http.x-forwarded-for) {
- set req.http.X-Forwarded-For =
- req.http.X-Forwarded-For "," client.ip;
- }
- else {
- set req.http.X-Forwarded-For = client.ip;
- }
- }
- if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE") {
- return (pipe);
- }
- elseif (req.request != "GET" && req.request != "HEAD") {
- return (pass);
- }
- elseif ((req.request=="GET" || req.request=="HEAD")&& req.url ~ "\.(png|gif|jpeg|swf|css|js|jpg)$"){
- return (lookup);
- }
- else {
- return (pipe);
- }
- if (req.http.Accept-Encoding){ #更改主机头提高缓存命中率
- if(req.url ~"\.(jpg|jpge|png|gif)$"){
- #No point in compressing these
- remove req.http.Accept-Encoding;
- }
- elseif (req.http.Accept-Encoding ~ "gzip"){
- set req.http.Accept-Encoding = "gzip";
- }
- elseif (req.http.Accept-Encoding ~ "deflate"){
- set req.http.Accept-Encoding = "deflate";
- }
- else{
- #unknow algorithm
- remove req.http.Accept-Encoding;
- }
- }
- }
- sub vcl_pipe {
- return (pipe);
- }
- sub vcl_pass {
- return (pass);
- }
- sub vcl_hash {
- set req.hash += req.url;
- if (req.http.host) {
- set req.hash += req.http.host;
- }
- else {
- set req.hash += server.ip;
- }
- return (hash);
- }
- sub vcl_hit{
- if (!obj.cacheable){
- return (pass);
- }
- else {
- return (deliver);
- }
- }
- sub vcl_miss{
- return (fetch);
- }
- sub vcl_fetch{
- if (!beresp.cacheable) {
- return (pass);
- }
- elseif (beresp.http.Set-Cookie) {
- return (pass);
- }
- else {
- return (deliver);
- }
- }
- sub vcl_deliver {
- return (deliver);
- }
- sub vcl_error {
- set obj.http.Content-Type = "text/html; charset=utf-8";
- synthetic {"
- <?xml version="1.0" encoding="utf-8" ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html>
- <head>
- <title>"{ obj.status " " obj.response }"</title>
- </head>
- <body>
- <h1>Error "{ obj.status "" obj.response }"</h1>
- <p>"{ obj.response}"</p>
- <h3>Guru Meditation:</h3>
- <p>XID: "{req.xin}" </p>
- <hr>
- <p>Varnish cache server</p>
- </body>
- </html>
- "};
- return (deliver);
- }