{{tag>Brouillon Proxy Web Perf}} = Notes Varnish Varnish Voir : * [[https://info.varnish-software.com/hubfs/E-books/New%20Varnish%20Book%20(2020)/Varnish_6_by_Example.pdf|PDF Book Varnish 6 by example]] * https://connect.ed-diamond.com/GNU-Linux-Magazine/GLMF-138/Varnish-un-proxy-qui-vous-veut-du-bien * https://makina-corpus.com/blog/metier/2018/varnish-et-drupal-gerer-un-cache-anonyme-etendu apt-get install varnish varnish-doc ''/etc/systemd/system/varnish.service.d/plop.conf'' # To add or override specific settings for the Varnish service, place a copy of # this file in /etc/systemd/system/varnish.service.d/ with a ".conf" suffix, # and edit to taste. See man:systemd.directives for what you can change. # # To activate, run: # * "systemctl daemon-reload" # * "systemctl restart varnish" # Add a documentation link to my own system documentation [Unit] Documentation=https://doc.example.com/client_a/varnish_service [Service] # Clear existing ExecStart= (required) ExecStart= # Set a new ExecStart= ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:8080 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,16g ''/etc/varnish/default.vcl'' # # This is an example VCL file for Varnish. # # It does not do anything by default, delegating control to the # builtin VCL. The builtin VCL is called when there is no explicit # return statement. # # See the VCL chapters in the Users Guide at https://www.varnish-cache.org/docs/ # and https://www.varnish-cache.org/trac/wiki/VCLExamples for more examples. # Marker to tell the VCL compiler that this VCL has been adapted to the # new 4.0 format. vcl 4.0; # Default backend definition. Set this to point to your content server. backend default { .host = "127.0.0.1"; .port = "8080"; } sub vcl_recv { # Happens before we check if we have this in cache already. # # Typically you clean up the request here, removing cookies you don't need, # rewriting the request, etc. } sub vcl_backend_response { # Happens after we have read the response headers from the backend. # # Here you clean the response headers, removing silly Set-Cookie headers # and other mistakes your backend does. } sub vcl_deliver { # Happens when we have all the pieces we need, and are about to send the # response to the client. # # You can do accounting or modifying the final object here. } VCL configuration Varnish will automatically append to your VCL file during compilation/loading : \\ ''/usr/share/doc/varnish/examples/builtin.vcl.gz'' Deux services : * varnish * varnishncsa (Display Varnish logs in Apache / NCSA combined log format) mkdir /lib/systemd/system/varnish.service.d #cp -p /lib/systemd/system/varnish.service /lib/systemd/system/varnish.service.d/plop.conf cp -p /usr/share/doc/varnish/examples/systemd/varnish.commandline.conf /lib/systemd/system/varnish.service.d/plop.conf vim !$ Varnish admin CLI #varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 == Reload Varnish Reload Varnish VCL without losing cache data ''/usr/local/bin/varnish_reload.sh'' #!/bin/bash TIME=$(date +%s) varnishadm vcl.load r_$TIME /etc/varnish/default.vcl varnishadm vcl.use r_$TIME ''/lib/systemd/system/varnish.service.d/reload.conf'' [Service] ExecReload=/usr/local/bin/varnish_reload.sh chmod +x /usr/local/bin/varnish_reload.sh systemctl daemon-reload # Now you can reload with : #systemctl reload varnish == VCL Voir : * Schéma https://raw.githubusercontent.com/varnish/Varnish-Book/master/ui/img/simplified_fsm.svg * https://github.com/varnish/Varnish-Book/blob/master/varnish_book.rst VCL Actions coté client et backend : * fail (Transition vers ''vcl_synth'') Actions coté client : * synth (synthérique, Transition vers ''vcl_synth'' * pass (OK, ne pas utiliser le cache, eveltuelle transition vers ''vcl_pass'') * pipe (bypass Varnish, Transition vers ''vcl_pipe'') * restart Actions coté backend : * abandon (Unless the backend request was a background fetchTransition vers ''vcl_synth'') Les Built-in subroutines coté client : * vcl_recv (point d'entrée) * vcl_pipe (bypass) * etc... == Debug varnishd -d -f /etc/varnish/default.vcl Pour avoir la command de lancement du daemon avec les arguments : systemctl status varnish On enlève le ''-F'' et on le remplace par un ''-d'' #sudo /usr/sbin/varnishd -j unix,user=vcache -d -F -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m sudo /usr/sbin/varnishd -j unix,user=vcache -d -d -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m Tapez ''start'' pour lancer le service Vérifier la syntax du fichier VCL varnishd -Cf /etc/varnish/default.vcl Changer les headers sub vcl_deliver { unset resp.http.Via; #unset resp.http.X-Powered-By; unset resp.http.X-Varnish; #unset resp.http.Age; unset resp.http.Server; } === Purge du cache curl -X PURGE -H "host: www.example.com" "www.example.com/foo" # HTTPie http PURGE "www.example.com/foo" === Bloquer (BAN) varnishadm ban req.http.host == example.com '&&' req.url '~' '\\.png$ == Autres * https://www.formatux.fr/formatux-services/module-111-varnish/index.html * https://www.varnish-software.com/wiki/content/tutorials/varnish/varnish_ubuntu.html * https://techexpert.tips/fr/varnish-fr/varnish-installation-sur-ubuntu-linux/ * https://www.linuxtricks.fr/wiki/installer-et-configurer-varnish-sur-gentoo-calculatelinux * https://www.linuxjournal.com/content/speed-your-web-site-varnish * https://wiki.archlinux.org/index.php/Varnish * https://www.varnish-software.com/wiki/content/tutorials/varnish/sample_vclTemplate.html * https://varnish-cache.org/docs/6.1/users-guide/increasing-your-hitrate.html * https://www.osaxis.fr/mise-en-place-d-un-serveur-de-cache-varnish-reverse-proxy/ * https://devdocs.magento.com/guides/v2.4/config-guide/varnish/config-varnish-configure.html * https://serverfault.com/questions/715649/extract-configuration-from-a-running-varnish-instance * https://wiki.evolix.org/HowtoVarnish * https://ffwagency.com/learning/blog/start-stop-and-restart-varnish-mac * https://wiki.minet.net/wiki/divers/ha/varnish * https://blog.link-value.fr/varnish-et-le-cache-55bf23935bd9 * https://feryn.eu/blog/varnish-4-1-haproxy-get-the-real-ip-by-leveraging-proxy-protocol-support/ * https://www.formatux.fr/formatux-services/module-111-varnish/index.html * https://techexpert.tips/fr/varnish-fr/varnish-installation-sur-ubuntu-linux/ * https://wiki.bruno-tatu.com/doku.php?id=wiki:install-cache-varnish Architecture : * https://harish11g.blogspot.com/2012/03/deployment-architectures-varnish-amazon.html * https://www.infoq.com/fr/presentations/varnishcon-emanuele-rocca-scaling-wikipedia/ varnishlog -g raw varnishstat -l varnishstat -1 -n varnish_instancename sudo varnishlog -n varnish_instancename -q 'ReqHeader ~ "Host: plop.fr"' purge : * http://wiki.tuxunix.com/index.php/Purger_le_cache_de_varnish * https://info.varnish-software.com/blog/failure-to-purge-a-story-about-client.ip-and-proxies sub vcl_recv { # Add a unique header containing the client address remove req.http.X-Forwarded-For; set req.http.X-Forwarded-For = client.ip; # [...] }