Varnish et son « stockage » 1

Introduction

Varnish peut cacher les données en mémoire et/ou sur disque.

On peut donc lui dire qu’on lui alloue 512Mo de mémoire pour cacher et aussi 95% de l’espace libre d’une partition en ajoutant les paramètres ci-dessous :

-s malloc,512M \
-s file,/var/lib/varnish/varnish_storage.bin,95%

Le stockage « Transient »

Varnish a aussi par défaut, un cache en mémoire pour les objets de courte durée, ce cache n’a pas de limite par défaut, ce fonctionnement par défaut peut donc faire swaper et cracher votre serveur (ou le mien :) )

Ce cache ce nome « Transient Storage »

Pour limiter ce cache et donc contrôler totalement l’utilisation en mémoire de vos varnish ajouter aux options du daemon

-s Transient=malloc,1G \
-s malloc,6G \
-s file,/var/lib/varnish/varnish_storage.bin,95%"

Votre Varnish dans ce cas utilisera 1Go de mémoire pour les objets de faible TTL, 6Go de mémoire pour le reste + le stockage du disque. Varnish utilisera donc au maximum 7Go de ram et ne fera plus swaper votre serveur

Commande utile

Pour lister les stockages actifs de votre instance Varnish

varnishadm storage.list

Effet secondaire

Le compromis est que les fichiers non « pipé » supérieurs a la taille du cache « Transient » défini seront tout simplement tronqué et donc corrompu.

Dans ce cas, le stockage sur disque n’est pas forcément utile, a vous de voir :)

Source(s)


Monitorer Apache avec Zabbix

Configuration de Nginx

Le serveur apache doit donner sont status en local via l’url http://localhost/server-status Pour cela, il faut ajouter configurer le vhost localhost comme ci-dessous. Il sera disponible uniquement via localhost:

<VirtualHost 127.0.0.1:80>
    ServerName localhost
    <Location /server-status>
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
</VirtualHost>

Configuration de l’agent Zabbix

Dans la configuration de l’agent Zabbix ajouter les paramètres suivant pour remonter au serveur les nouvelles clefs

UserParameter=apache.freeworkers,curl -s http://localhost/server-status?auto | grep ^Score | grep -o '\.' | wc -l
UserParameter=apache.status[*],curl -s http://localhost/server-status?auto | awk '/$1: / {print $NF}' | sed 's/^\./0./g'

Import du template

Télécharger et importer zbx_templates_apache.xml dans vos modèles Ce template contient toutes les clefs, deux graphiques et deux triggers :

  • Graphiques
    • Apache Bytes
    • Apache Threads
  • Triggers
    • 10% worker ilde available on {HOST.NAME}
    • Apache on {HOST.NAME} has just been restarted

Have fun :)


Monitorer Nginx avec Zabbix

Configuration de Nginx

Le serveur nginx doit donner sont status en local via l’url http://localhost:61123/nginx_status
Pour cela, il faut ajouter le « server » suivant qui sera disponible uniquement via localhost sur le port 61123:

server {
        listen       127.0.0.1:61123;
        server_name  localhost;
        location /nginx_status {
                stub_status on;
                access_log   off;
                allow 127.0.0.1;
                deny all;
        }
}

Configuration de l’agent Zabbix

Dans la configuration de l’agent Zabbix ajouter les paramètres suivant pour remonter au serveur les nouvelles clefs

UserParameter=nginx.active[*],curl -s http://localhost:61123/nginx_status | awk '/^Active/ {print $NF}'
UserParameter=nginx.reading[*],curl -s http://localhost:61123/nginx_status | awk '/Reading/ {print $$2}'
UserParameter=nginx.writing[*],curl -s http://localhost:61123/nginx_status | awk '/Writing/ {print $$4}'
UserParameter=nginx.waiting[*],curl -s http://localhost:61123/nginx_status | awk '/Waiting/ {print $$6}'
UserParameter=nginx.accepted[*],curl -s http://localhost:61123/nginx_status | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$1}'
UserParameter=nginx.handled[*],curl -s http://localhost:61123/nginx_status | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$2}'
UserParameter=nginx.requests[*],curl -s http://localhost:61123/nginx_status | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$3}'

Import du template

Télécharger et importer zbx_templates_nginx.xml dans vos modèles

Ce template contient toutes les clefs et deux graphiques :

  • Nginx current connections
  • Nginx requests

Have fun :)


Protection contre le hotlinking avec Varnish

Voici un exemple de condition à ajouter dans votre vcl recv pour protéger un dossier d’un site :

if (req.http.host == "le.domaine.a.proteger.ltd" && req.url ~ "^/l/uri/a/proteger" && (req.http.referer && req.http.referer !~ "^http://le.domaine.a.proteger.ltd/")) {
    error 403 "No hotlinking please";
}

Remplacer :

  • le.domaine.a.proteger.ltd par le domaine (attention si votre site est accessible avec et sans www)
  • /l/uri/a/proteger : par l’uri à protéger, supprimer cette partie si vous voulez protéger l’intégralité du site

Pour mettre en place le même type de protection via apache, voir cet article : Un htaccess pour les pompeurs de sites dans lequel est expliqué comment procéder avec des règles de réécriture Apache


FreeBSD 10.0 sur une RaspberryPI rev. B

Voici comment « bsdiser » votre Raspberry :

  1. Téléchargez l’image : FreeBSD-10.0-STABLE-arm-armv6-RPI-B-20140127-r261200.img.bz2 ou plus récente sur un miroir FreeBSD
  2. Copier l’image sur votre SD avec dd :
    bunzip2 -c FreeBSD-10.0-STABLE-arm-armv6-RPI-B-20140127-r261200.img.bz2 | dd of=/dev/votresd bs=1M
  3. Une fois la BSD en ligne :
    1. SSH sera lancé
    2. Le compte root n’as pas de mot de passe (vous ne pourrez pas vous y connecter en ssh sans changer le mot de passe)
    3. Le clavier est en qwerty
    4. L’interface réseau est en DHCP

Si vous voulez faire l’image vous même, voici un article (en anglais) qui explique comment procéder et comment compiler le kernel : http://blog.khubla.com/freebsd/creating-a-custom-freebsd-build-for-raspberry-p