Eu li a documentação do Varnish mais algumas vezes e comecei a brincar com a minha configuração local e consegui isso funcionar. O verniz, pelo menos a versão 2.1, que é o que eu usei para meus testes, considera um diretor como um backend, então você pode verificar o set request.backend e isso irá definir o diretor correto para usar. Então eu fiz isso:
if (req.url ~ "^/new-section") {
set req.backend = django_balancer;
} else {
set req.backend = balancer;
}
Onde django_balancer é um novo diretor criado de maneira semelhante ao meu balancer original (veja detalhes na pergunta). Obviamente, este novo diretor tem que apontar para a configuração dos servidores web para servir o projeto Django.
Agora o Varnish servirá tudo usando o diretor dos servidores do Drupal, exceto os URLs que começam com / new-section, que serão servidos pelo diretor para os servidores do Django.
Existe alguma configuração extra no default.vcl para o Drupal e o Django para tratar corretamente os cookies com o Varnish, mas isso é outro problema e já existem alguns recursos online com detalhes sobre como lidar com isso.
E, a propósito, eu recebi a dica da página wiki do Varnish sobre balanceamento de carga . a parte principal:
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;
}
}
Eu acho que o uso de req.backend é confuso, deve haver algo como req.director para torná-lo mais claro.