cant get restart; to fetch and deliver from other backend on HTTP error

Gerald Leier gerald.leier at lixto.com
Thu Aug 27 16:29:13 CEST 2009


hello,

I want to use varnish to "hide" HTTP 50x codes.
As far as i understood this is done in the "sub vcl_fetch"

After setting up 2 servers(one returning the requested page
the other returning 500 errors) i tested a bit but i have
some bug in there i cant get a grip on.

after the first node returns a http 500 error varnish continues with
the second node....here is the part where it stops doing what i want:

.....
10 VCL_return   c restart
10 VCL_call     c recv
10 VCL_return   c pass
10 VCL_call     c pass
10 VCL_return   c pass
11 BackendOpen  b test2 10.10.1.1 51154 10.10.1.50 38080
10 Backend      c 11 www_director test2
11 TxRequest    b POST
11 TxURL        b /testservice
11 TxProtocol   b HTTP/1.1
11 TxHeader     b User-Agent: curl
11 TxHeader     b Host: 10.10.1.1:38080
11 TxHeader     b Accept: */*
11 TxHeader     b Content-Type: text/xml;charset=UTF-8
11 TxHeader     b Content-Length: 326
11 TxHeader     b X-Varnish: 614647428
11 TxHeader     b X-Forwarded-For: 10.21.1.40
	11 BackendClose b test2
	10 VCL_call     c error
	10 VCL_return   c deliver
.....


has anyone a hint on what i am doing wrong?

thanks
 gerald


.....

./varnishd -f ../etc/varnish/testing.vcl -a 10.10.1.1:38080

../etc/varnish/testing.vcl:

backend test1 {
    .host = "10.10.1.50";
    .port = "38080";
}

backend test2 {
    .host = "10.10.1.60";
    .port = "38080";
}

director www_director round-robin {
{ .backend = test1; }
{ .backend = test2; }
}

sub vcl_recv {
# Force lookup if the request is a no-cache request from the client
    if (req.http.Cache-Control ~ "no-cache") { purge_url(req.url); }
    if (req.restarts == 0) {
            set req.backend = www_director;
    } else {
            set req.backend = www_director;
    }
    if (req.request != "GET" && req.request != "HEAD") {
    /* We only deal with GET and HEAD by default */
             return (pass);
    }
    if (req.http.Authorization || req.http.Cookie) {
    /* Not cacheable by default */
             return (pass);
    }
    # set an artificial header to pass on the true client IP address
    remove req.http.X-Varnish-Client-IP;
    set    req.http.X-Varnish-Client-IP = client.ip;
}

sub vcl_fetch {
    if (obj.status == 500 || obj.status == 503 || obj.status == 504) {
            restart;
    }
}

sub vcl_deliver {
    # hide existence of this proxy server
    remove resp.http.X-Varnish;
    remove resp.http.Via;
    deliver;
}
------------------------------------------------------------------------

log:
------------------------------------------------------------------------
10 SessionOpen  c 10.21.1.40 7984 10.10.1.1:38080
10 ReqStart     c 10.21.1.40 7984 614647428
10 RxRequest    c POST
10 RxURL        c /testservice
10 RxProtocol   c HTTP/1.1
10 RxHeader     c User-Agent: curl
10 RxHeader     c Host: 10.10.1.1:38080
10 RxHeader     c Accept: */*
10 RxHeader     c Content-Type: text/xml;charset=UTF-8
10 RxHeader     c Content-Length: 326
10 VCL_call     c recv
10 VCL_return   c pass
10 VCL_call     c pass
10 VCL_return   c pass
11 BackendOpen  b test1 10.10.1.1 60016 10.10.1.60 38080
10 Backend      c 11 www_director test1
11 TxRequest    b POST
11 TxURL        b /testservice
11 TxProtocol   b HTTP/1.1
11 TxHeader     b User-Agent: curl
11 TxHeader     b Host: 10.10.1.1:38080
11 TxHeader     b Accept: */*
11 TxHeader     b Content-Type: text/xml;charset=UTF-8
11 TxHeader     b Content-Length: 326
11 TxHeader     b X-Varnish: 614647428
11 TxHeader     b X-Forwarded-For: 10.21.1.40
0 CLI          - Rd ping
0 CLI          - Wr 0 200 PONG 1251380397 1.0
0 CLI          - Rd ping
0 CLI          - Wr 0 200 PONG 1251380400 1.0
11 RxProtocol   b HTTP/1.1
11 RxStatus     b 500
11 RxResponse   b Internal Server Error
11 RxHeader     b X-Powered-By: Servlet/2.5
11 RxHeader     b Server: Sun GlassFish Enterprise Server
11 RxHeader     b Content-Type: text/xml;charset="utf-8"
11 RxHeader     b Transfer-Encoding: chunked
11 RxHeader     b Date: Thu, 27 Aug 2009 13:39:56 GMT
11 RxHeader     b Connection: close
10 ObjProtocol  c HTTP/1.1
10 ObjStatus    c 500
10 ObjResponse  c Internal Server Error
10 ObjHeader    c X-Powered-By: Servlet/2.5
10 ObjHeader    c Server: Sun GlassFish Enterprise Server
10 ObjHeader    c Content-Type: text/xml;charset="utf-8"
10 ObjHeader    c Date: Thu, 27 Aug 2009 13:39:56 GMT
11 BackendClose b test1
10 TTL          c 614647428 RFC 120 1251380396 0 0 0 0
10 VCL_call     c fetch
10 VCL_return   c restart
10 VCL_call     c recv
10 VCL_return   c pass
10 VCL_call     c pass
10 VCL_return   c pass
11 BackendOpen  b test2 10.10.1.1 51154 10.10.1.50 38080
10 Backend      c 11 www_director test2
11 TxRequest    b POST
11 TxURL        b /testservice
11 TxProtocol   b HTTP/1.1
11 TxHeader     b User-Agent: curl
11 TxHeader     b Host: 10.10.1.1:38080
11 TxHeader     b Accept: */*
11 TxHeader     b Content-Type: text/xml;charset=UTF-8
11 TxHeader     b Content-Length: 326
11 TxHeader     b X-Varnish: 614647428
11 TxHeader     b X-Forwarded-For: 10.21.1.40
11 BackendClose b test2
10 VCL_call     c error
10 VCL_return   c deliver
10 Length       c 465
10 VCL_call     c deliver
10 VCL_return   c deliver
10 TxProtocol   c HTTP/1.1
10 TxStatus     c 503
10 TxResponse   c Service Unavailable
10 TxHeader     c Server: Varnish
10 TxHeader     c Retry-After: 0
10 TxHeader     c Content-Type: text/html; charset=utf-8
10 TxHeader     c Content-Length: 465
10 TxHeader     c Date: Thu, 27 Aug 2009 13:40:01 GMT
10 TxHeader     c Age: 5
10 TxHeader     c Connection: close
10 ReqEnd       c 614647428 1251380396.585108042 1251380401.618464947
0.000111103 5.033315897 0.000041008
10 SessionClose c error




More information about the varnish-misc mailing list