在同一个Varnish服务器后面运行Drupal和Django站点的最好方法是什么?

我有一个运行Drupal和Apache的高stream量网站,在Varnish服务器负载平衡后面有五个Web服务器。 假设这个网站是example.com。 我在我的default.vcl中使用了五个后端和一个这样的导演:

director balancer round-robin { { .backend = web1; } { .backend = web2; } { .backend = web3; } { .backend = web4; } { .backend = web5; } } 

现在我正在开发一个新的Django项目,它将成为example.com/new-section上运行的这个站点的一个新的部分。

在检查文档后,我发现我可以做这样的事情:

 sub vcl_recv { if (req.url ~ "^/new-section/") { set req.backend = newbackend; } else { set req.backend = default; } } 

也就是说,对同一个域下的子目录/新节使用不同的后端。

我的问题是,我如何使我的导演和负载平衡设置这样的工作?

我可能会用我的新的Django项目来运行两个或更多的web服务器(后端),每个项目都有一个Gunicorn,Nginx和一些Python包的组合,并且希望把所有这些都放在他们自己的Varnish director负载平衡。

是否有可能使用上述方法来决定使用哪个导演?如下所示:

 sub vcl_recv { if (req.url ~ "^/new-section/") { set req.director = newdirector; } else { set req.director = balancer; } } 

所有的build议欢迎。

谢谢!

我多次阅读Varnish的文档,并开始使用本地设置进行播放,而且我的工作正常。 光油,至less是我用于testing的版本2.1,认为一个导演是后端,所以你可以检查设置request.backend,这将设置正确的导演使用。 所以我这样做了:

 if (req.url ~ "^/new-section") { set req.backend = django_balancer; } else { set req.backend = balancer; } 

django_balancer是一个新创build的导演,与我的原始平衡者类似(见问题中的细节)。 很显然,这位新导演必须指出为了服务Django项目而设置的web服务器。

现在,Varnish将使用Drupal服务器的导演服务,除了以/ new-section开头的URL(由导演为Django服务器提供服务)之外。

在Drupal和Django的default.vcl中有一些额外的设置,用varnish正确地处理cookies,但这是另一个问题,在线上已经有一些资源了,关于如何处理它的细节。

顺便说一下,我从Varnish的维基页面获得了有关负载平衡的提示,这是关键部分:

  You can send traffic to your brand new director in vcl_recv, like this: sub vcl_recv { if (req.http.host ~ "^(www.)?mysite.com$") { set req.backend = baz; } } 

我认为req.backend的使用是令人困惑的,应该有像req.director这样的东西使其更清晰。