Outils pour utilisateurs

Outils du site


systeme:varnish

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
systeme:varnish [2012/11/25 11:57] rootsysteme:varnish [2014/02/15 13:41] (Version actuelle) – [Présentation] root
Ligne 3: Ligne 3:
 ===== Présentation ===== ===== Présentation =====
  
-  * [[http://osaxis.fr/blog/index.php/2011/07/21/30-mise-en-place-d-un-serveur-de-cache-varnish-reverse-proxy|Concept / configuration]]+Permet de limiter les requêtes pour tout ce qui est statique sur un site web.
  
 +Pour limiter le contenu dynamique avec par exemple des requêtes SQL complexes on le couplera à [[http://memcached.org/|memcached]].
  
 ===== Tuto ===== ===== Tuto =====
  
   * [[http://www.netdoor.fr/article-1917-varnish-php-5-3-et-apache-2-sous-gentoo.html|Tuto 1]]   * [[http://www.netdoor.fr/article-1917-varnish-php-5-3-et-apache-2-sous-gentoo.html|Tuto 1]]
 +  * [[http://decrypt.ysance.com/2012/02/le-web-accelere-avec-varnish/|Tuto 2]]
   * [[http://blog.inforeseau.com/2011/05/configurer-varnish-cache-avec-virtualhosts-fedora-redhat-centos|Varnish et les vhosts]]   * [[http://blog.inforeseau.com/2011/05/configurer-varnish-cache-avec-virtualhosts-fedora-redhat-centos|Varnish et les vhosts]]
   * [[http://binbash.fr/2011/11/15/purger-le-cache-de-varnish-3/|Purger le cache]]   * [[http://binbash.fr/2011/11/15/purger-le-cache-de-varnish-3/|Purger le cache]]
Ligne 17: Ligne 19:
 Pour le voir appuyer sur F12 danle navigateur Chrome : [[http://www.virtual-drums.com/chrome_headers.png|screenshot]] Pour le voir appuyer sur F12 danle navigateur Chrome : [[http://www.virtual-drums.com/chrome_headers.png|screenshot]]
 </note> </note>
 +
 +{{:systeme:vcl-649x1024.png|}}
  
 ===== Benchmark ===== ===== Benchmark =====
  
   * [[http://www.blitz.io|Benchmark]]   * [[http://www.blitz.io|Benchmark]]
 +
 +===== Aministration à chaud =====
 +
 +Il est possible de changer des valeurs à chaud avec l'interface d'administration en ligne de commande :
 +  varnishadm -T localhost:6082 -S /etc/varnish/secret
 +
  
 ===== Monitoring ===== ===== Monitoring =====
Ligne 31: Ligne 41:
 Pour savoir quelles requêtes sont transmises par Varnish au serveur web (Apache): Pour savoir quelles requêtes sont transmises par Varnish au serveur web (Apache):
   varnishtop -i txurl   varnishtop -i txurl
 +
 +Voir ce qui est demandé au serveur Apache pour **/membres/chat** :
 +  varnishlog -b -i TxURL -I '^/membres/chat/'
 +
 +===== Script =====
 +
 +<code c>
 +#http://blog.jeremm.fr/?tag=vcl
 +sub vcl_recv {
 +    # Serve objects up to 2 minutes past their expiry if the backend is slow to respond
 +    set req.grace = 120s;
 +
 +    # Normalize encoding/compression
 +    if (req.http.Accept-Encoding) {
 +        if (req.http.Accept-Encoding ~ "gzip") { set req.http.Accept-Encoding = "gzip"; }
 +        elsif (req.http.Accept-Encoding ~ "deflate") { set req.http.Accept-Encoding = "deflate"; }
 +        else { remove req.http.Accept-Encoding; }
 +    }
 +
 +    if (req.restarts == 0) {
 +      if (req.http.x-forwarded-for) {
 +          set req.http.X-Forwarded-For =
 +              req.http.X-Forwarded-For + ", " + client.ip;
 +      } else {
 +          set req.http.X-Forwarded-For = client.ip;
 +      }
 +    }
 +
 +    if (req.request != "GET" &&
 +      req.request != "HEAD" &&
 +      req.request != "PUT" &&
 +      req.request != "POST" &&
 +      req.request != "TRACE" &&
 +      req.request != "OPTIONS" &&
 +      req.request != "DELETE") {
 +          # Non-RFC2616 or CONNECT which is weird.
 +          return (pipe);
 +    }
 +
 +    if (req.request != "GET" && req.request != "HEAD") {
 +        # We only deal with GET and HEAD by default
 +        return (pass);
 +    }
 +
 +    # If the request is static
 +    if (req.url ~ "\.(jpeg|jpg|png|gif|bmp|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)$") {
 +        # Make the request static by removing any cookies set by those static files
 +        unset req.http.cookie;
 +        return (lookup);
 +    }
 +
 +    if (req.http.Authorization || req.http.Cookie) {
 +        # Not cacheable by default
 +        return (pass);
 +    }
 +
 +    return (lookup);
 +}
 +
 +sub vcl_pass {
 +        set req.http.X-marker = "pass" ;
 +}
 +
 +sub vcl_fetch {
 +    set beresp.grace = 120s;
 +    unset beresp.http.Server;
 +
 +    # Maximum 24h de cache
 +    set beresp.ttl = 86400s;
 +    set beresp.http.cache-control = "max-age=0";
 +    remove beresp.http.Pragma;
 +    remove beresp.http.Expires;
 +
 +    if (req.http.X-marker == "pass") {
 +            unset req.http.X-marker;
 +            set beresp.http.X-marker = "pass";
 +            #set beresp.ttl = 0s ;
 +    }
 +
 +    # If the request is static
 +    if (req.url ~ "\.(jpeg|jpg|png|gif|bmp|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)$") {
 +        # Cache it, and make it last 24 hours
 +        set beresp.ttl = 86400s;
 +        # Make the request static by removing any cookies set by those static files
 +        unset beresp.http.set-cookie;
 +        # Deliver the cached object
 +        #return (deliver);
 +    }
 +
 +    return (deliver);
 +}
 +
 +sub vcl_deliver {
 +        if (obj.hits > 0){
 +                set resp.http.X-Gigix-Cache = "HIT";
 +        }else{
 +                set resp.http.X-Gigix-Cache = "MISS";
 +        }
 +        if (resp.http.X-marker == "pass" ) {
 +                remove resp.http.X-marker;
 +                set resp.http.X-Gigix-Cache = "PASS";
 +        }
 +
 +        remove resp.http.Via;
 +        remove resp.http.X-Varnish;
 +        remove resp.http.Server;
 +        remove resp.http.X-Powered-By;
 + }
 +</code>
 +
 +===== Apache =====
 +
 +Changer le **LogFormat** par :
 +<code>
 +LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined
 +</code>
 +
 +Puis changer dans les vhosts :
 +<code>
 +CustomLog /var/log/apache2/domain.com-access.log varnishcombined
 +</code>
 +
 +Pour que la variable php **$_SERVER["REMOTE_ADDR"]** continue de s'afficher correctement au lieu de 127.0.0.1, il faut utiliser le module |rpaf.
 +
 +<code>
 +sudo apt-get install libapache2-mod-rpaf
 +</code>
 +
 +Configurer rpaf pour un vhost :
 +<code>
 +<IfModule mod_rpaf.c>
 +RPAFenable On
 +RPAFsethostname On
 +RPAFproxy_ips 172.27.0.1
 +RPAFheader X-Forwarded-For
 +</IfModule>
 +</code>
 +
 +Où RPAFproxy_ips est l'ip de votre reverse-proxy. La variable RPAFproxy_ips peut prendre plusieurs IP séparées par un espace.
 +
 +
 +===== Purge du cache =====
 +
 +http://binbash.fr/2011/11/15/purger-le-cache-de-varnish-3/
 +
 +https://www.varnish-cache.org/docs/3.0/tutorial/purging.html
 +
 +
 +===== Streaming =====
 +
 +http://binbash.fr/2012/02/09/varnish-3-et-le-streaming-un-cas-dusage/
 +
 +  * **__A retenir :__** pour activer le streaming avec Varnish, il suffit de rajouter l’instruction set beresp.do_stream = true; dans la boucle vcl_fetch de votre configuration. La version actuelle de Varnish ne permet qu’un seul stream à la fois. Il faut utiliser la version “s”, ici 3.0.2s, pour bénéficier de la nouvelle implémentation du streaming… En attendant la prochaine release majeure.
systeme/varnish.1353844637.txt.gz · Dernière modification : 2012/11/25 11:57 de root