2016-09-05 1 views
0

Depuis quelque temps, j'utilise les solutions Varnish Cache et tant que la configuration était plus ou moins la même qu'après l'installation, tout s'est très bien passé.Vernis Vcl pour plusieurs connexions de ports entrants et sortants

Mais maintenant j'aime faire un peu plus avec Varnish. Actuellement, j'utilise la configuration suivante pour mes serveurs:

Visiteurs -> CloudFlare -> HaProxy -> Vernis (serveurs séparés) -> Contenu Apache2. Ce que je veux savoir, c'est comment je peux faire le bon script vcl pour accepter une requête entrante de l'ip A sur le port B et rediriger cela vers l'ip C sur le port D. (Et cela plus d'une fois.)

Exemple:

Default.Varnish fonctionne bien comme ceci:

DAEMON_OPTS="-a :8085,:8087 \ 
      -T localhost:6082 \ 
      -f /etc/varnish/default.vcl \ 
      -S /etc/varnish/secret \ 
      -s malloc,768m" 

Mais maintenant sur le Varnish.Default:

backend default_1 { .host = "11.22.333.444"; .port = "8885"; } 
backend default_2 { .host = "11.22.333.444"; .port = "8887"; } 

Et j'ai essayé quelque chose comme ceci:

sub vcl_recv { 
if (server.port == 8885) { set req.backend = default_1; } 
if (server.port == 8887) { set req.backend = default_2; } 
} 

(S'il vous plaît être conscient du fait que les deux demandes vont au même serveur sortant. Seul le port est différent!)

Quelqu'un qui sait assez de Varnish sait déjà ce que je veux deviner. J'aime juste utiliser Varnish pour envoyer des 'canaux' distincts en fonction de différents ports.

+0

Essayez paramètre 'req.backend_hint' au lieu de' req.backend'. – mwp

Répondre

0

Essayez de vérifier le port de liaison Varnish, pas le port back-end

sub vcl_recv { 
if (server.port == 8085) { set req.backend = default_1; } 
if (server.port == 8087) { set req.backend = default_2; } 
} 
+0

Obtention de cette réponse lors du redémarrage Vernis: * Vérification de la syntaxe varnishd ... échec! Message du compilateur VCC: Symbole non trouvé: 'server.port' (type attendu BOOL): ('entrée' Ligne 20 Pos 6) if (server.port == 8085) {set req.backend = default_1 ; } ----- ########### -------------------------------- ---------- Exécution CCV-compilateur a échoué, sorti avec 2 –

+0

cela a probablement quelque chose à voir avec (j'oublié de mentionner que je suis en utilisant la version 4 du vernis.): client.port , et server.port remplacé par respectivement std.port (client.ip) et std.port (server.ip) client.ip et server.ip sont maintenant des types de données appropriés, qui se traduit par une adresse IP par défaut. Vous devez utiliser la fonction std.port() pour obtenir le numéro de port. Trouvé dans ce document: https://www.varnish-cache.org/docs/4.0/whats-new/upgrading.html –

+0

J'ai désinstallé la version 4 de Varnish et installé 3.0 juste pour que cette routine fonctionne. Plus tard, nous espérons trouver un moyen de faire la même chose avec la version 4. Donc pour l'instant j'espère avoir fait la bonne chose en acceptant votre réponse comme la solution M. Ghloogh. –