http {
map $cookie_no_cache $cacheZone {
default "";
true X;
}
server {
root /srv/web/example.com;
server_name example.com;
error_page 405 = @backend;
location / {
try_files /cache$cacheZone/$uri.html /static$cacheZone/$uri
/cache$cacheZone/$uri @backend;
}
location @backend {
proxy_pass http://localhost:8060;
}
}
}
Explicação.
- Em relação à verificação do cookie "no_cache". Estamos substituindo por Nginx
map
. Variável$cacheZone
depende do valor de$cookie_no_cache
. Por padrão, ele está vazio, mas se houver um cookie "no_cache = true", definimos$cacheZone
como qualquer valor para modificar o caminho de pesquisa do arquivo estático emtry_files
- espero que você não tenha as pastas/cacheX
e/staticX
sob sua raiz do servidor (se sim, escolha outro valor para$cacheZone
) - O Nginx não pode aplicar os métodos HTTP
PUT
ouPOST
a arquivos estáticos (isso não tem sentido), portanto, emite um erro HTTP 405 "Não permitido" neste caso. Interceptamos porerror_page
e passamos a solicitação para@backend
location.
Abordagem alternativa
Caso contrário, use proxy_cache
:
http {
proxy_cache_path example:1m;
server {
root /srv/web/example.com;
server_name example.com;
location / {
proxy_cache example;
proxy_cache_bypass $cookie_no_cache;
proxy_cache_valid 200 10s;
proxy_pass http://localhost:8060;
}
}
}