2017-04-11 13 views
1

I가 다음 VCL : 나는 그것을 실행하면Varnish VCL : req.backend_hint를 어떻게 전환 할 수 있습니까?

vcl 4.0; 

import std; 
import directors; 

backend one { 
    .host = "localhost"; 
    .port = "3333"; 
} 

backend two { 
    .host = "localhost"; 
    .port = "3333"; 
} 

sub vcl_init { 
    new random_director = directors.random(); 
    random_director.add_backend(two, 10); 
    random_director.add_backend(one, 8); 
} 

sub vcl_recv { 

    std.log("start vcl_recv"); 

    set req.backend_hint = random_director.backend(); 
    if (req.backend_hint == one) { 
     std.log("one"); 
    } else if (req.backend_hint == two) { 
     std.log("two"); 
    } else { 
     std.log("neither one"); 
    } 

    std.log("end vcl_recv"); 
} 

, 출력은 항상 :

start vl_recv 
neither one 
end vcl_recv 

어떻게 제대로 선택되어있는 백엔드 확인할 수 있습니다?

감사

+0

을 만약 당신이 단지'std.log (REQ .backend_hint)'설정 한 후에? – SuperDuperApps

답변

1

vcl_backend_fetch에서 사용자가 액세스 할 수 있어야합니다 bereq.backend.name

그래서 코드를 이동, 당신은 같은이있을 수 있습니다 어떻게됩니까

sub vcl_backend_fetch { 
    if (bereq.backend.name == "one") { 
     std.log("one"); 
    } else if (bereq.backend.name == "two") { 
     std.log("two"); 
    } else { 
     std.log("neither one"); 
    } 
}