1 votes

Varnish + Nginx + adresses IP multiples

C'est la première fois que j'essaie de faire fonctionner Varnish sur mon serveur dédié qui héberge deux domaines avec deux adresses IP distinctes. Ma configuration simplifiée est la suivante :

Configuration de Nginx

server {
    listen ip-address-1:8080;
}

server {
    listen ip-address-2:8080;
}

Vernis vcl

backend default {
    .host = "127.0.0.1";
    .port = "80";
}

Et dans le vernis conf j'ai défini

VARNISH_LISTEN_PORT=80

Varnish et Nginx (et php-fpm) fonctionnent correctement mais lorsque j'essaie d'accéder à mon site web, la page de bienvenue de nginx s'affiche. Les en-têtes ne contiennent pas le mot x-varnish. Il semble que pour une raison quelconque, varnish n'écoute pas le port 80. Je soupçonne que cela a à voir avec le fichier vcl où il écoute l'hôte 127.0.0.1. Je gère deux sites Wordpress. Où dois-je chercher pour que Varnish fonctionne correctement ?

A la vôtre, Adnan

EDITAR:

Nginx semble être dans 8080 correctement mais Varnish n'écoute pas la bonne adresse IP. Utilisation par Jens de plusieurs adresses IP de Varnish netstat -lnp rendements :

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 46.105.40.241:8080          0.0.0.0:*                   LISTEN      21610/nginx         
tcp        0      0 5.135.166.39:8080           0.0.0.0:*                   LISTEN      21610/nginx         
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      21610/nginx         
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      2544/named          
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      1195/vsftpd         
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1184/sshd           
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      2544/named          
tcp        0      0 46.105.40.241:443           0.0.0.0:*                   LISTEN      21610/nginx         
tcp        0      0 5.135.166.39:443            0.0.0.0:*                   LISTEN      21610/nginx         
tcp        0      0 127.0.0.1:6082              0.0.0.0:*                   LISTEN      21350/varnishd      
tcp        0      0 :::80                       :::*                        LISTEN      21351/varnishd      
tcp        0      0 ::1:53                      :::*                        LISTEN      2544/named          
tcp        0      0 :::22                       :::*                        LISTEN      1184/sshd           
tcp        0      0 ::1:953                     :::*                        LISTEN      2544/named          
udp        0      0 127.0.0.1:53                0.0.0.0:*                               2544/named          
udp        0      0 ::1:53                      :::*                                    2544/named          

default.vcl

backend ikhebeenbril {
    .host = "5.135.166.39";
    .port = "8080";
}

backend sunculture {
    .host = "46.105.40.241";
    .port = "8080";
}
sub vcl_recv {

    if (server.ip == "5.135.166.39") {
        set req.backend = ikhebeenbril; 
    } else {
        set req.backend = sunculture;
    }
...
}

sub vcl_hash {
    hash_data(server.ip);
    if (req.http.host) {
        hash_data(req.http.host);
    }
    hash_data(req.url);
    if (req.http.Accept-Encoding) {
        hash_data(req.http.Accept-Encoding);
    }
    return (hash);
}

Blocs de serveurs nginx

server {
        listen 5.135.166.39:80;
        listen 5.135.166.39:443 default ssl spdy;
        server_name www.ikhebeenbril.nl;
}

server {
        listen 46.105.40.241:80;
        listen 46.105.40.241:443 default ssl spdy;
        server_name www.thesunculture.com;
}

1voto

Jens Bradler Points 5913

Si vous configurez votre Nginx pour écouter sur deux adresses IP, vous devez également utiliser ces adresses IP dans Varnish. La meilleure façon de le faire est d'utiliser deux enregistrements backend différents pour Varnish.

backend server1 {
    .host = "IP-ADDRESS-1";
    .port = "8080";
}
backend server2 {
    .host = "IP-ADDRESS-2";
    .port = "8080";
}

Veuillez remplacer IP-ADDRESS-1 et IP-ADDRESS-2 par les adresses IP correctes.

Pour affecter le backend aux demandes entrantes, vous pouvez utiliser l'exemple suivant ou le modifier en fonction de vos besoins :

sub vcl_recv {
    if (server.ip == "IP-ADDRESS-1") {
        set req.backend = server1; 
    } else {
        set req.backend = server2;
    }
    ...
}

Il peut être important d'utiliser les adresses IP pour générer l'ID de hachage de l'objet de cache. Ajoutez une méthode vcl_hash spécifique à votre configuration Varnish :

sub vcl_hash {
    hash_data(server.ip);
    if (req.http.host) {
        hash_data(req.http.host);
    }
    hash_data(req.url);
    if (req.http.Accept-Encoding) {
        hash_data(req.http.Accept-Encoding);
    }
    return (hash);
}

Veillez à faire pointer les backends de Varnish vers vos sites web configurés. Dans l'exemple donné, vous avez configuré Nginx pour écouter sur le port 8080 mais vous avez adressé Varnish au port 80. Si vous n'avez pas supprimé la configuration par défaut du site web de Nginx, Nginx répondra avec ce site.

0voto

Tero Kilkanen Points 32968

C'est un peu une supposition, mais je pense que vous avez un hôte virtuel par défaut encore défini dans nginx, et qu'il est défini pour écouter sur le port 80, et donc Varnish est incapable de se lier à ce port.

Vérifiez donc votre configuration nginx, et supprimez l'hôte virtuel par défaut.

Si cela ne résout pas le problème, mettez les configurations complètes de nginx et Varnish dans la question, et la sortie de netstat -lnp .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X