52 votes

Configurer plusieurs sites avec Varnish

Nous avons un serveur qui doit desservir plusieurs domaines par exemple, exemple1.com, exemple2.com et exemple3.com

Notre fichier .vcl actuel ressemble à ceci:

 sub vcl_recv {
  set req.http.Host = "example1.com";    
  lookup;
}
 

Comment définir le correct req.http.Host pour la demande entrante correcte?

91voto

Cristian Vidmar Points 706

Vous pouvez prendre en charge plusieurs domaines frontaux de cette façon:

  backend example1 {
     .host = "backend.example1.com";
     .port = "8080";
 }
 backend example2 {
      .host = "backend.example2.com";
      .port = "8080";
 }
 sub vcl_recv {
    if (req.http.host == "example1.com") {
        #You will need the following line only if your backend has multiple virtual host names
        set req.http.host = "backend.example1.com";
        set req.backend = example1;
        return (lookup);
    }
    if (req.http.host == "example2.com") {
        #You will need the following line only if your backend has multiple virtual host names
        set req.http.host = "backend.example2.com";
        set req.backend = example2;
        return (lookup);
    }
 }
 

27voto

msurovcak Points 441

J'utilise une configuration similaire à celle de Cristian, mais dans les clauses if, je fais correspondre req.http.host à une expression régulière:

 #for www.example.com or example.com
if (req.http.host ~ "^(www\.)?example\.com$") {
        set req.backend = example_com;
        return (lookup);
}

#with any subdomain support
if (req.http.host ~ "^(.*\.)?example2\.com$") {
        set req.backend = example2_com;
        return (lookup);
}
 

N'oubliez pas de définir les backends correctement!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X