Cache-control para redirecionamentos 301 permanentes nginx

3

Eu queria saber se existe uma maneira de controlar a vida útil dos redirecionamentos no Nginx?

Gostaríamos de armazenar em cache 301 redirecionamentos em CDN para quantidade específica de tempo, digamos 20 minutos e o CDN é controlado pelos cabeçalhos de cache padrão. Por padrão, não há diretivas Cache-control ou Expires com o redirecionamento Nginx. Isso pode fazer com que o redirecionamento seja armazenado por muito tempo. Por ter um tempo de vida de redirecionamento específico, o sistema pode ter a chance de se corrigir, sabendo que mesmo redirecionamentos "permanentes" mudam de tempos em tempos.

A outra coisa é que esses redirecionamentos são incluídos no bloco Server, que, de acordo com a especificação nginx, devem ser avaliados antes dos locais.

Eu tentei adicionar add_header Cache-Control "max-age = 1200, public"; na parte inferior do arquivo de redirecionamentos, mas o problema é que o Cache-control é adicionado duas vezes - primeiro vem o say do script de backend e o outro adicionado pela diretiva add_header.

No Apache, há o truque da variável de ambiente para controlar cabeçalhos para reescreves:

RewriteRule / taxonomia / term / (\ d +) / feed / taxonomia / term / $ 1 [R = 301, E = expirar: 1] Cabeçalho sempre definido Cache-Control "store, max-age = 1200" env = expire

Mas não sei como fazer isso no Nginx.

    
por gansbrest 30.05.2012 / 18:25

1 resposta

2

Já experimentou flags de controle de cache em sua configuração nginx?

Configuração de amostra:

upstream yourappserver{
  server 0.0.0.0:6677;
}


proxy_cache_path  /tmp/cache levels=1:2 keys_zone=my-test-cache:8m max_size=5000m inactive=300m;

server {
    listen 80;
    server_name your.domain.tld;
    root /path/to/the/document/root/;

    access_log  /var/log/nginx/access.log;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_cache my-test-cache;
      proxy_cache_valid  200 404  1m;
      proxy_cache_valid 302 20m;

      proxy_cache_use_stale   error timeout invalid_header updating;
      proxy_redirect off;

      if (-f $request_filename/index.html) {
        rewrite (.*) $1/index.html break;
      }
      if (-f $request_filename.html) {
        rewrite (.*) $1.html break;
      }
      if (!-f $request_filename) {
        proxy_pass http://yourappserver;
        break;
      }
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
      root html;
    }
}

Acho que você está procurando este snippet de configuração específico

proxy_cache_valid 302 20m;
    
por 30.05.2012 / 18:35