[RÉSOLU] Varnish - Combiner gestions du cache dans htaccess

Vous avez un soucis de développement et ce n'est pas du ressort de notre support ? N'hésitez pas à soumettre vos petits soucis de développement et à vous entre aider par la même occasion.
Avatar de l’utilisateur
Tilde3
Messages : 461
Inscription : 19 octobre 2011 à 13:11
Contact :

Bonjour,

Je souhaite désactiver la gestion en cache par Varnish du CSS. Il faut donc mettre dans le .htaccess :

Code : Tout sélectionner

<IfModule mod_headers.c>
  <IfModule mod_expires.c>
    ExpiresActive On
    <FilesMatch "\.(css)$">
      Header set Cache-Control: "no-cache"
      </FilesMatch>
    </IfModule>
</IfModule>
Mon souci, c'est que je ne sais pas comment le combiner avec les autres commandes déjà présentes dans mon fichier :

Code : Tout sélectionner

#CACHE-UTILISATEUR
<ifModule mod_expires.c="">
    ExpiresActive on

    <FilesMatch "\.(css)$">
        Header set Cache-Control: "no-cache"
    </FilesMatch>

    ExpiresByType text/html        "access plus 0 seconds"
    ExpiresByType text/css        "access plus 1 month"
    ExpiresByType image/x-icon    "access plus 6 months"
    ExpiresByType image/jpg        "access plus 6 months"
    ExpiresByType image/png        "access plus 6 months"

    <IfModule mod_headers.c>
    Header append Cache-Control "public"
    </IfModule>

</ifModule>
Est-ce que je dois écrire :

Code : Tout sélectionner

#CACHE-UTILISATEUR
<ifModule mod_expires.c="">
    ExpiresActive on

    <FilesMatch "\.(css)$">
        Header set Cache-Control: "no-cache"
    </FilesMatch>

    ExpiresByType text/html        "access plus 0 seconds"
    ExpiresByType text/css        "access plus 1 month"
    ExpiresByType image/x-icon    "access plus 6 months"
    ExpiresByType image/jpg    "access plus 6 months"
    ExpiresByType image/png    "access plus 6 months"

    <IfModule mod_headers.c>
    Header append Cache-Control "public"
    </IfModule>

</ifModule>
Merci d'avance !
Avatar de l’utilisateur
Tilde3
Messages : 461
Inscription : 19 octobre 2011 à 13:11
Contact :

Bon. J'ai mis le code suivant, mais Google Page Speed continue de me dire que je n'ai pas défini la mise en cache des css et des png :

Code : Tout sélectionner

# Charset
    AddDefaultCharset    UTF-8

# Expire headers
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 7200 seconds"
    ExpiresByType image/jpg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    AddType image/x-icon .ico
    ExpiresByType image/ico "access plus 2592000 seconds"
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType text/css "access plus 2592000 seconds"
    ExpiresByType text/javascript "access plus 2592000 seconds"
    ExpiresByType text/xml "access plus 3600 seconds"
</IfModule>

# Cache-Control Headers
<IfModule mod_headers.c>
    <FilesMatch "\.(ico|jpg|png|gz)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>
    <FilesMatch "\.(css)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>
    <FilesMatch "\.(js)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>
    <filesMatch "\.(html|htm)$">
        Header set Cache-Control "max-age=7200, public"
    </filesMatch>
</IfModule>

# Kill etags
    Header unset ETag
    FileETag none

# Type-mime
    AddType    application/x-7z-compressed    .7z
    AddType    application/vnd.oasis.opendocument.text    .odt
    AddType    application/pdf    .pdf
    AddType image/jpg .jpg
    AddType image/png .png

# Rss-feed
    <Files rss.xml>
        AddCharset UTF-8 .xml
        AddType text/xml .xml
    </Files>

#404
    ErrorDocument 404    /404.htm

# Protect htaccess file
    <files .htaccess>
        order allow,deny
        deny from all
    </files>
Avatar de l’utilisateur
Elodie
Fondatrice / Responsable
Fondatrice / Responsable
Messages : 7938
Inscription : 2 avril 2010 à 20:14

Bonjour Tilde3,

Il n'y a pas que Google dans la vie :)

Pour vérifier le fonctionnement du cache de Varnish, il faut regarder du coté des Headers de l’élément à vérifier.

Sous Windows, il y a par exemple l'extension Web Developer sous Firefox : Clic droit > Web Developer > Information > En tête HTTP (réponses).

Sous Linux, un simple : links --dump --head http://adressedelelementaverifier

Prenons exemple avec cette images : https://www.franceserv.fr/images/site/anti-phishing.png

Voici les headers de cette image :
Server: nginx/1.0.13
Date: Tue, 10 Apr 2012 16:39:07 GMT
Content-Type: image/png
Last-Modified: Sat, 24 Sep 2011 09:32:33 GMT
FranceServ-Hebergement: It took D=3060 microseconds for Apache to serve this request.
X-Cacheable: Il n'y a pas de 'no-cache', on HIT la prochaine fois !
Cache-Control: max-age=600
Content-Length: 31966
Accept-Ranges: bytes
X-Varnish: 1710695652 1710692650
Via: 1.1 varnish
Age: 0
X-Cache: HIT
On vois qu'il y a une information de "HIT", c'est que l'image est en cache, si elle ne l'était pas ça serai écrit "MISS". max-age=600 nous apprend qu'elle est en cache pendant 600 secondes (10 minutes) et l'information "X-Cacheable" qui vient de moi annonce qu'il n'y a pas eu de 'no-cache' de trouvé dans les headers ;)
Vous avez une question ? Posez-la de préférence sur le forum et si ça demande un contact plus instantané, n'hésitez pas à vous rendre sur le t'chat IRC. Si votre question est personnelle, contactez-nous directement.
Avatar de l’utilisateur
Tilde3
Messages : 461
Inscription : 19 octobre 2011 à 13:11
Contact :

J'ai Web Developer justement, et il semble bien que le cache soit pris en charge par htaccess.

Je craignais que mon fichier ne soit pas bon sur les Expire headers et les Cache-Control Headers. Merci du coup de main ! :)
Avatar de l’utilisateur
Tilde3
Messages : 461
Inscription : 19 octobre 2011 à 13:11
Contact :

Bon, je viens de retester avec w3m, dans le terminal (je ne savais même pas qu'il pouvait faire ça). Mon htaccess a l'air bancal…

Pour ma page d'accueil, le Cache-Control est bon (7200 sec.) :

Code : Tout sélectionner

$ w3m -dump_both http://www.tilde3.eu/
HTTP/1.1 200 OK
Last-Modified: Fri, 13 Apr 2012 15:58:14 GMT
Accept-Ranges: bytes
Cache-Control: max-age=7200, max-age=7200, public
Expires: Wed, 18 Apr 2012 01:18:59 GMT
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
FranceServ-Hebergement: It took D=6574 microseconds for Apache to serve this request.
Content-Type: text/html; charset=UTF-8
Server: Nginx/Varnish/HAProxy/Apache Servers
Content-Length: 2609
Accept-Ranges: bytes
Date: Tue, 17 Apr 2012 23:18:59 GMT
X-Varnish: 1620009285
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: MISS
Mon css semple toujours géré par Varnish (600 sec.) :

Code : Tout sélectionner

$ w3m -dump_both http://www.tilde3.eu/css-site.css
HTTP/1.1 200 OK
Last-Modified: Tue, 10 Apr 2012 18:14:38 GMT
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
FranceServ-Hebergement: It took D=8608 microseconds for Apache to serve this request.
Content-Type: text/css
Server: Nginx/Varnish/HAProxy/Apache Servers
X-Cacheable: Il n'y a pas de 'no-cache', on HIT la prochaine fois !
cache-control: max-age=600
Content-Length: 1826
Accept-Ranges: bytes
Date: Tue, 17 Apr 2012 23:24:19 GMT
X-Varnish: 1620012461
Via: 1.1 varnish
Connection: close
age: 0
X-Cache: MISS
Idem pour le logo de mon site (.png), même si X-Cache est cette fois sur HIT :

Code : Tout sélectionner

$ w3m -dump_both http://www.tilde3.eu/Medias/Images/o-site.png
HTTP/1.1 200 OK
Last-Modified: Tue, 10 Apr 2012 04:55:10 GMT
FranceServ-Hebergement: It took D=5584 microseconds for Apache to serve this request.
Content-Type: image/png
Server: Nginx/Varnish/HAProxy/Apache Servers
X-Cacheable: Il n'y a pas de 'no-cache', on HIT la prochaine fois !
cache-control: max-age=600
Content-Length: 2492
Accept-Ranges: bytes
Date: Tue, 17 Apr 2012 23:13:52 GMT
X-Varnish: 1620006059 1620005924
Via: 1.1 varnish
Connection: close
age: 0
X-Cache: HIT
Avatar de l’utilisateur
Elodie
Fondatrice / Responsable
Fondatrice / Responsable
Messages : 7938
Inscription : 2 avril 2010 à 20:14

Lorsque c'est à "X-Cache: MISS", c'est que Varnish ne met pas en cache.

Pour le savoir, il faut demander le fichier au moins 2 fois de suite en moins de 10 minutes intervalle (donc 2 w3m à la suite quoi) pour vérifier si le X-Cache passe à HIT. S'il reste à MISS, c'est qu'il ne met pas en cache.
Vous avez une question ? Posez-la de préférence sur le forum et si ça demande un contact plus instantané, n'hésitez pas à vous rendre sur le t'chat IRC. Si votre question est personnelle, contactez-nous directement.
Avatar de l’utilisateur
Tilde3
Messages : 461
Inscription : 19 octobre 2011 à 13:11
Contact :

EDIT: 2012-04-25

Nouvel essai :

Code : Tout sélectionner

# Expire headers
<IfModule mod_headers.c>
    <IfModule mod_expires.c>
        <FilesMatch "\.(css|js|png|jpg)$">
            Header set Cache-Control "max-age=2592000, public"
        </FilesMatch>
    </IfModule>
</IfModule>
Nouvel échec : Toujours pas de gestion possible du cache -_-
Avatar de l’utilisateur
Tilde3
Messages : 461
Inscription : 19 octobre 2011 à 13:11
Contact :

C'est bon ! J'ai pu combiner l'usage de Varnish avec des règles de mise en cache perso \o/

Extrait des expire headers et des cache control :

Code : Tout sélectionner

# EXPIRE HEADERS
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault "access plus 600 seconds"
        ExpiresByType image/jpg "access plus 2592000 seconds"
        ExpiresByType text/css "access plus 2592000 seconds"
    </IfModule>

# CACHE-CONTROL
    <IfModule mod_headers.c>
        <FilesMatch "\.(css|js|gif|png|jpg|jpeg)$">
            Header set cache-control "max-age=2592000, public"
        </FilesMatch>
    </IfModule>
Merci à Élodie pour sa patience ;)
Avatar de l’utilisateur
Elodie
Fondatrice / Responsable
Fondatrice / Responsable
Messages : 7938
Inscription : 2 avril 2010 à 20:14

Je ne met en cache plus que les images maintenant :)
(trop de soucis de personnes qui ne comprenaient pas)
Vous avez une question ? Posez-la de préférence sur le forum et si ça demande un contact plus instantané, n'hésitez pas à vous rendre sur le t'chat IRC. Si votre question est personnelle, contactez-nous directement.
Répondre