search
top

Charger votre site dans le cache Varnish grace a son sitemap.xml

Cela peux se faire avec uniquement wget et egrep mais cela ne cachera pas les image, javascript css et autre fichiers. Cette solution n’utilisera pas d’espace dique.

wget --quiet http://domain.ltd/sitemap.xml -O - | egrep -o "http://domain\.ltd[^<]+" | wget --spider -nv -i -

N’oubliez pas de remplacer domain.ltd par votre domain :)

Pour tous crawler, vous pouvez utiliser le script ci-dessous, celui ci mettra en cache toutes les pages, image, css et js

#!/usr/bin/env sh

BIN_DEPS='wget awk grep cut'

# CHECKS

if [ "$1" = "" ]; then
    echo "Usage : $0 domain.ltd"
    exit 1
else
    DOMAIN=$1
fi

for BIN in $BIN_DEPS; do
    which $BIN 1>/dev/null 2>&1
    if [ $? -ne 0 ]; then
        echo "Error: Required file could not be found: $BIN"
        exit 1
    fi
done

URLS=$(wget -q http://$DOMAIN/sitemap.xml -O - | awk -F'<loc>' '{print $2}' | awk -F '</loc>' '{ print $1 }' | grep -v ^$)

for URL in $URLS; do
    PAGE=$(wget -q -O - $URL | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 )
    SRC=$(wget -q -O - $URL | grep -o -E 'src="([^"#]+)"' | cut -d'"' -f2 )
    for LINK in $PAGE $SRC; do
        if echo $LINK | grep $DOMAIN | grep -vi feed 1>/dev/null ; then
            wget --domains=$DOMAIN -O/dev/null -nv $LINK
        fi
    done
done

Ngnix : Gérer la mise en cache des fichiers static

Vous pouvez procéder de la manière suivante

location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
    expires 24h;
    log_not_found off;
}

Reverse proxy transparents

Vous pouvez utiliser nginx pour cacher ces propres « server ».
Pour cela, l’idée est simple, vous avez un « server » qui ecoute sur votre IP public et vos autre « server » applicatif écoute sur une ip privée ou local

Dans l’exemple de configuration ci-dessous, les « servers » applicatif écoute sur 127.0.0.1:80

server {
    listen       111.222.111.2222:80 default;
    server_name  _;
    server_name_in_redirect off;

    location / {
        set $no_cache "";
        if ($request_method !~ ^(GET|HEAD)$) {
            set $no_cache "1";
        }
        if ($no_cache = "1") {
            add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
            add_header X-Microcachable "0";
        }
        if ($http_cookie ~* "_mcnc") {
            set $no_cache "1";
        }
        proxy_no_cache $no_cache;
        proxy_cache_bypass $no_cache;
        proxy_pass http://127.0.0.1;

        proxy_cache microcache;
        proxy_cache_key $scheme$host$request_method$request_uri;
        proxy_cache_valid 200 1s;
        proxy_cache_use_stale updating;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_max_temp_file_size 1M;
    }
    access_log  /var/log/nginx/access.log vhosts;
    error_log  /var/log/nginx/error.log info;
}

Vous devez ajouter dans votre « http » la ligne ci-dessous pour activer le cache Nginx

proxy_cache_path /var/spool/nginx/cache levels=1:2 keys_zone=votreclef:5m max_size=1000m;

Dans cette exemple, ce dossier de cache ne dépassera pas 1000Mo et sera purgé par Nginx
Vous pouvez supprimé la directive access_log pour utiliser l’astuce indiqué dans cet article

Réduire le nombre de requête MySQL de WordPress

WordPress sans cache, va générer les pages a chaque demande, cela génère donc du temps de « compilation » php, des requêtes MySQL.
Cela peux si vous avez beaucoup de pages, saturer votre serveur lors d’un pique de visite et/ou lorsqu’un moteur vous index.

Pour cela, installer simplement le plugin wp-cache et activez le.

Dans le fichier de configuration wp-config.php vous devez aussi spécifier :

define('WP_CACHE', true);

Pour activer le cache de WordPress

top