As regras de cache do mapa Nginx não funcionam

1

Eu criei regras de mapa para o Nginx para evitar cache. No entanto, ele não funciona nocache_map.conf (incluído na seção http.

map $http_x_requested_with $nocache {
        default         0;
        XMLHttpRequest  1;
    }

map $http_cookie $nocache {
        default                     0;
        SESS                        1;
        PHPSESSID                   1;
        ~*wordpress_[a-zA-Z0-9-].*  1;
        comment_author              1;
        wp-postpass                 1;
        _mcnc                       1;
    }

map $request_uri $nocache {
        default                                     0;
        ~*\/wp-admin\/.*                            1;
        ~*\/wp-[a-zA-Z0-9-]+\.php                   1;
        ~*\/feed\/.*                                1;
        ~*\/administrator\/.*                       1;
}

map $http_user_agent $nocache {
    default                                      0;
    ~*android|ip(hone|od)|windows\s+(?:ce|phone) 1;
    ~*symbian|sonyericsson|samsung|lg|blackberry 1;
    ~*mobile                                     1;
}

map $request_method $nocache {
    default 0;
    POST    1; #no caching on post
}

Essas regras funcionam bem no nocache.conf.

#Cache everything by default
    set $nocache 0;

#Don't cache POST requests
    if ($request_method = POST) { set $nocache 1; }

#Don't cache if the URL contains a query string
    if ($query_string != "") { set $nocache 1; }

# Ajax
    if ($http_x_requested_with = XMLHttpRequest) { set $nocache 1; }

# Wordpress section start

# Don't cache uris containing the following segments
    if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
    set $nocache 1;
    }

# Don't use the cache for logged in users or recent commenters
   if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in*|_mcnc") {
   set $nocache 1;
    }

# Wordpress section end

    if ($http_user_agent ~* "android|ip(hone|od)|windows\s+(?:ce|phone)|symbian|sonyericsson|samsung|lg|blackberry|mobile") {
    set $nocache 1;    
    }

Configuração do servidor

server {
    listen      80;
    include     nocache.conf
    ...

    location /
    {
        try_files   $uri $uri/ /index.php?$args;
    }

location ~ ^.+\.php(?:/.*)?$
{
    try_files           $uri $uri/ /index.php$is_args$args;


fastcgi_split_path_info     ^(.+.php)(.*)$;
        fastcgi_no_cache                $nocache $cookie_nocache;
        fastcgi_cache_bypass        $nocache $cookie_nocache;
....

Cache funciona bem apenas as regras do mapa não funcionam Você poderia me ajudar a encontrar onde está o erro? Obrigado.

    
por Rostyslav Malenko 04.11.2014 / 22:48

1 resposta

2

Você está declarando a mesma variável várias vezes com a diretiva map , portanto, quando o nginx avaliar isso no contexto das diretivas fastcgi_no_cache ou fastcgi_cache_bypass , ela usará apenas um bloco map .

Declarar variáveis diferentes e usá-las nestas diretivas.

    
por 04.11.2014 / 23:51

Tags