Proxy Reverso NGINX: proxy_cache dentro de um bloco - Possível?

1

Acho que começar com um pequeno trecho seria o mais sábio:

    location ^~ /test/ {
            proxy_pass              http://frontend;
            proxy_http_version      1.1;
            proxy_set_header        Connection "";
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Real-Port $server_port;
            if ( $remote_addr ~* "123.123.123.123" ) {
                    proxy_cache            cache_base;
                    proxy_cache_valid      720m;
            }
    }

Então, basicamente, o que queremos fazer é configurar o cache de proxy com base em uma instrução IF coniditonal.

O acima não funciona, pois proxy_cache não é válido dentro do IF.

Alguém sabe como armazenar em cache proxy com base em uma correspondência de expressão regular em uma das muitas variáveis internas do nginx?

Nota:

Queremos basicamente desabilitar / habilitar proxy_caching com base no regexp $ remote_addr. Não especifique valores proxy_cache diferentes.

Obrigado.

    
por anonymous-one 16.05.2012 / 12:50

2 respostas

3

Parece que o que você realmente quer é combinar uma variável geográfica com proxy_cache_bypass e proxy_no_cache :

geo $skip_cache {
  default 1;
  123.123.123.123/32 0;
  1.2.3.4/32 0;
  10.0.0.0/8 0;
}

server {
  location ^~ /test/ {
    proxy_pass              http://frontend;
    proxy_http_version      1.1;
    proxy_set_header        Connection "";
    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Real-Port $server_port;
    proxy_cache            cache_base;
    proxy_cache_valid      720m;

    # When $skip_cache is 1, the cache will be bypassed, and
    # the response won't be eligible for caching.
    proxy_cache_bypass     $skip_cache;
    proxy_no_cache         $skip_cache;
  }
}
    
por 16.05.2012 / 14:07
1

'Se' é geralmente uma prática ruim na configuração do nginx. Você pode usar o módulo de mapas para fazer as coisas funcionarem. veja o link link

map $remote_addr $matched_ip_location { 
123.123.123.123 @cache; 
default         @default; 
} 
... 
location ^~ /test/ {
 ... 
rewrite ^ $matched_ip_location
}
location @cache {
    ...
    proxy_cache            cache_base;
    proxy_cache_valid      720m;
}
location @default {
   ...
}
    
por 16.05.2012 / 13:20