Hi,
On Wed, Jan 12, 2011 at 09:59:13AM +0100, Frank Helmschrott wrote: > via google i came to this post on varnish-software.com regarding vhost > solutions for varnish: > http://www.varnish-software.com/blog/virtual-hosts-varnish > > I'd like to have a similar solution with an 'as small as possible' > master.vcl that does the if/elsif part. I'd like to have mostly > different configurations for each host. There are a few different approaches. The basic issue is: Varnish has several entry points to VCL (vcl_recv, vcl_fetch, etc), and you have to either have one VCL per function per site, or have the if(req.http.host ~ ...) in each of the VCLs. If at all possible, I'd go for the latter. Ie: # master.vcl include "site1.vcl"; include "site2.vcl"; # site1.vcl backend site1backend { .host = "foo1" }; sub vcl_recv { if (req.http.host ~ "site1") { set req.backend = site1backend; (... more site1 stuff ...) } } sub vcl_deliver { if (req.http.host ~ "site1") { set resp.http.X-site = "Server by site 1"; } } # site2.vcl backend site2backend { .host = "foo1" }; sub vcl_recv { if (req.http.host ~ "site2") { set req.backend = site2backend; (... more site2 stuff ...) } } sub vcl_deliver { if (req.http.host ~ "site2") { set resp.http.X-site = "Server by site 2"; } } It adds a bit of extra indentation in each file, but the benefit is that you get full use of VCL in all the included files - for better or worse. The alternative is: # master.vcl backend site1 .... backend site2 .... sub vcl_recv { if (req.http.host ~ "site1") { set req.backend = site1; include "site1recv.vcl"; } elif (req.http.host ~ "site2") { set req.backend = site2; include "site2recv.vcl"; } } sub vcl_deliver { if (req.http.host ~ "site1") { include "site1deliver.vcl"; } elif (req.http.host ~ "site2") { include "site2deliver.vcl"; } } (followed by logic for vcl_recv in site1recv.vcl, site2recv.vcl and so forth). The benefit here is that all the "which site is this" control is contained in the master file, but you also get a large amount of _different_ files and less direct control in the included files... But for further reading, you really must go through the Varnish tutorial at http://www.varnish-cache.org/docs/2.1/ - Kristian PS: I didn't even pretend to proof read the VCL - consider it pseudo-code _______________________________________________ varnish-misc mailing list [email protected] http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
