Différentes règles Nginx basées sur le référent

12

J'utilise WordPress avec WP Super Cache. Je veux que les visiteurs qui viennent de Google (qui incluent tous les référents spécifiques à un pays comme google.co.in, google.co.uk et etc.) voient le contenu non mis en cache .

Il y a mes règles nginx qui ne fonctionnent pas comme je le souhaite:

server {
    server_name  website.com;
    location / {
        root   /var/www/html/website.com;
        index  index.php;
           if ($http_referer ~* (www.google.com|www.google.co) ) {
                   rewrite . /index.php break;
           }
           if (-f $request_filename) {
                   break;
           }
           set $supercache_file '';
           set $supercache_uri $request_uri;
           if ($request_method = POST) {
                   set $supercache_uri '';
           }
           if ($query_string) {
                   set $supercache_uri '';
           }
           if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
                   set $supercache_uri '';
           }
           if ($supercache_uri ~ ^(.+)$) {
                   set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
           }
           if (-f $document_root$supercache_file) {
                   rewrite ^(.*)$ $supercache_file break;
           }
           if (!-e $request_filename) {
                   rewrite . /index.php last;
           }
    }
    location ~ \.php$ {
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME /var/www/html/website.com$fastcgi_script_name;
            include         fastcgi_params;
    }
}

Que dois-je faire pour atteindre mon objectif?

Dylan Valade
la source

Réponses:

3

Je ne suis pas familier avec WP Supercache, mais si vous avez juste besoin de réécrire dans index.php pour éviter le cache, cela ne devrait pas être trop difficile.

Votre filtre existant n'est pas complet car il ne vérifie que google.com et google.co. Selon cette liste , il existe de nombreux TLD que Google utilise qui ne correspondent pas, tels que google.de, google.fr, etc.

Le filtre suivant devrait vous limiter aux référents commençant par www.google et se terminant par n'importe quelle combinaison de TLD à 2-3 caractères.

if ($http_referer ~* ^www.google.[a-z]{2,3}(.[a-z]{2})?$ ) {
    # do whatever you need to do here to avoid caching
}
Farray
la source
2

Tu y es presque.

Tout d'abord, les règles WP Super Cache sont très compliquées. Ils doivent vraiment être repensés de fond en comble, mais c'est un projet pour un autre jour.

Pour que cela fonctionne, ne revenez pas immédiatement, définissez plutôt le $supercache_uri = ''comme toutes les autres vérifications. Par exemple:

if ($http_referer ~* (www.google.com|www.google.co) ) {
    set $supercache_uri '';
}

Cela doit apparaître APRÈS le point où il se $supercache_uritrouve à l'origine set, et non au début où vous l'avez.

Michael Hampton
la source
0

cela peut fonctionner pour $ http_referer:

       if ($http_referer ~* (www.google.com|www.google.co) ) {
               break;
       }
       if (!-e $request_filename) {
               rewrite . /index.php break;
       }

la source
cela ne fonctionne pas non plus
-1

Essaye ça

if ($http_referer ~* (www.example.com|example.com.au) ) {
           return 301 http://your-url.example/custom-path;
}
Ansyori
la source
2
Je ne comprends pas
Pierre.Vriens
1
Je ne comprends pas non plus. Comment la redirection du navigateur vers une autre URL évite-t-elle la mise en cache côté serveur?
Michael Hampton