Diferentes reglas nginx basadas en el referente

12

Estoy usando WordPress con WP Super Cache. Quiero que los visitantes que provienen de Google (que incluyen todos los referentes específicos de cada país, como google.co.in, google.co.uk, etc.) vean el contenido no almacenado en caché .

Existen mis reglas nginx que no funcionan de la manera que quiero:

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

¿Qué debo hacer para lograr mi objetivo?

Dylan Valade
fuente

Respuestas:

3

No estoy familiarizado con WP Supercache, pero si solo necesita volver a escribir en index.php para evitar el caché, no debería ser demasiado difícil.

Su filtro existente no es completo, ya que solo busca google.com y google.co. Según esta lista , hay muchos TLD que utiliza Google que no coinciden, como google.de, google.fr, etc.

El siguiente filtro debe limitarlo a referencias que comienzan con www.google y terminan con cualquier combinación de TLD de 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
fuente
2

Ya casi estás ahí.

Primero, las reglas de WP Super Cache son muy desordenadas. Realmente necesitan ser rediseñados desde cero, pero ese es un proyecto para otro día.

Para que esto funcione, no regrese de inmediato, en lugar de eso, configúrelo $supercache_uri = ''como lo hacen todas las demás comprobaciones. Por ejemplo:

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

Esto debe aparecer DESPUÉS del punto donde $supercache_uriestá originalmente set, y no al principio donde lo tiene.

Michael Hampton
fuente
0

Esto puede funcionar para $ http_referer:

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

fuente
esto tampoco funciona
-1

Prueba esto

if ($http_referer ~* (www.example.com|example.com.au) ) {
           return 301 http://your-url.example/custom-path;
}
Ansyori
fuente
2
No lo entiendo
Pierre.Vriens
1
Yo tampoco lo entiendo. ¿Cómo redirige el navegador a otra URL para evitar el almacenamiento en caché del lado del servidor?
Michael Hampton