Cache-control no-cache, mas não em pastas-filho no Nginx

1

Estou usando essa regra no Nginx

location ~ /app/(?<code>...)/acme/?(?<uri>.*) {
  add_header Cache-Control "max-age=0, no-cache, no-store, must-revalidate";
  proxy_pass http://int-srv/$code/acme/dev/$uri;
}

Isso adiciona o cabeçalho de controle de cache que escrevi acima em chamadas para

/app/abc/acme
/app/abc/acme/assets
/app/abc/acme/assets/js
/app/abc/acme/assets/css
/app/abc/acme/anything

Eu só quero que o cabeçalho de controle de cache seja aplicado a / app / abc / acme, porque quando esse terminal é chamado, a resposta é o conteúdo de nosso index.html. Não quero armazená-lo em cache e ele está funcionando muito bem.

Se você está pensando em criar a regra usando index.html, infelizmente não funcionará porque não vejo que estamos fazendo uma chamada diretamente para o arquivo (/ app / abc / acme / index. html) nas ferramentas do depurador de cromo

Então basicamente é isso que eu quero

/app/abc/acme - apply cache-control no-cache,etc header to this location only
/app/abc/acme/assets - don't want cache-control header
/app/abc/acme/assets/js - don't want cache-control header
/app/abc/acme/assets/css - don't want cache-control header
/app/abc/acme/anything - - don't want cache-control header

Se você acha que estou fazendo algo ruim, por favor me avise.

    
por devwannabe 23.09.2016 / 13:58

1 resposta

1

Você pode usar dois locais, um correspondente ao URL mais curto. Por exemplo:

location ~ ^/app(?<code>/...)/acme/(?<stuff>.*)$ {
    add_header Cache-Control "max-age=0, no-cache, no-store, must-revalidate";
    rewrite ^ $code/acme/dev/$stuff break;
    proxy_pass http://int-srv;
}
location ~ ^/app(?<code>/...)/acme$ {
    rewrite ^ $code/acme/dev break;
    proxy_pass http://int-srv;
}

O nome da variável $uri já está definido pelo sistema, então você provavelmente deve usar um nome diferente.

O uso de um componente de URI com a diretiva proxy_pass quando dentro de um local de expressão regular funciona claramente, mas não está documentado. Na verdade, a documentação afirma:

When location is specified using a regular expression. In this case, the directive should be specified without a URI

Então, meu exemplo usa o rewrite ... break .

    
por 23.09.2016 / 15:32