Diverse regole nginx basate sul referrer


12

Sto usando WordPress con WP Super Cache. Voglio che i visitatori che provengono da Google (che includa tutti i referrer specifici per Paese come google.co.in, google.co.uk ecc.) Vedano contenuti non memorizzati nella cache .

Ci sono le mie regole nginx che non funzionano come voglio:

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;
    }
}

Cosa devo fare per raggiungere il mio obiettivo?

Risposte:


3

Non ho familiarità con WP Supercache, ma se hai solo bisogno di riscrivere in index.php per evitare la cache non dovrebbe essere troppo difficile.

Il filtro esistente non è completo poiché controlla solo google.com e google.co. Secondo questo elenco , ci sono molti TLD che Google utilizza che non corrispondono, come google.de, google.fr, ecc.

Il seguente filtro dovrebbe limitarti ai referrer che iniziano con www.google e terminano con qualsiasi combinazione di TLD a 2-3 caratteri.

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

2

Ci sei quasi.

Innanzitutto, le regole di WP Super Cache sono molto complicate. Hanno davvero bisogno di essere riprogettati da zero, ma questo è un progetto per un altro giorno.

Per farlo funzionare, non tornare immediatamente, invece imposta $supercache_uri = ''come fanno tutti gli altri controlli. Per esempio:

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

Questo deve apparire DOPO il punto in cui si $supercache_uritrova originariamente sete non all'inizio dove lo hai.


0

questo può funzionare per $ http_referer:

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

anche questo non funziona

-1

Prova questo

if ($http_referer ~* (www.example.com|example.com.au) ) {
           return 301 http://your-url.example/custom-path;
}

2
Non capisco
Pierre.Vriens,

1
Neanche io capisco. In che modo il reindirizzamento del browser a un altro URL evita la memorizzazione nella cache sul lato server?
Michael Hampton
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.