Regras nginx diferentes baseadas no referenciador

12

Estou usando o WordPress com o WP Super Cache. Desejo que os visitantes que vêm do Google (incluindo todos os referenciadores específicos de países como google.co.in, google.co.uk e etc.) vejam conteúdos não armazenados em cache .

Existem minhas regras nginx que não estão funcionando da maneira que desejo:

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

O que devo fazer para alcançar meu objetivo?

Dylan Valade
fonte

Respostas:

3

Não estou familiarizado com o WP Supercache, mas se você precisar reescrever o arquivo index.php para evitar o cache, não deve ser muito difícil.

Seu filtro existente não é abrangente, pois verifica apenas google.com e google.co. De acordo com esta lista , existem muitos TLDs que o Google usa que não correspondem, como google.de, google.fr etc.

O filtro a seguir deve limitar você a referências que começam com www.google e terminam com qualquer combinação de TLDs com 2-3 caracteres.

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

Você está quase lá.

Primeiro, as regras do WP Super Cache são muito complicadas. Eles realmente precisam ser redesenhados desde o início, mas esse é um projeto para outro dia.

Para que isso funcione, não retorne imediatamente; em vez disso, defina o $supercache_uri = ''como todas as outras verificações. Por exemplo:

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

Isso precisa aparecer APÓS o ponto em que $supercache_uriestá originalmente sete não no começo em que você o possui.

Michael Hampton
fonte
0

isso pode funcionar para $ http_referer:

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

fonte
isso também não funciona #
-1

Tente isto

if ($http_referer ~* (www.example.com|example.com.au) ) {
           return 301 http://your-url.example/custom-path;
}
Ansyori
fonte
2
Eu não entendo
Pierre.Vriens
1
Eu também não entendo. Como o redirecionamento do navegador para outro URL evita o cache do servidor?
Michael Hampton