Andrii Rusanov
Andrii Rusanov

Reputation: 4606

Different configuration of uwsg_cache depends on url path

I have uwsgi cache configured, but I want to make it work differently for different locations. My config:

uwsgi_cache_path /tmp/nginx_cache/ levels=1:2 keys_zone=mycache:60m inactive=10m;

server {
 listen *:80;
 server_name thewebsite.loc;


location @uwsgi {
    include uwsgi_params;
    uwsgi_cache mycache;
    uwsgi_cache_valid any 1h;
    uwsgi_cache_key $request_uri;
    uwsgi_pass unix:///var/run/app/uwsgi.sock;
    uwsgi_read_timeout 120s;
  }

  location / {
    try_files $uri @uwsgi;
  }
}

let's say, I want to disable cache for a particular location. I add after block for location / another location:

  location /dynamic{
     uwsgi_cache off;
     try_files $uri @uwsgi;
  }

But it doesn't work and the view still cached. Is it possible or not supposed to work like this at all?

UPD: I've also tried to configure cache in location /. In this case, it simply doesn't work.

Upvotes: 2

Views: 143

Answers (1)

Kamil Niski
Kamil Niski

Reputation: 4765

When you access /dynamic the nginx sets uwsgi_cache off but then you redirect to @uwsgi location where you have cache enabled. I think that causes your problem.

Try moving cache config to server context:

uwsgi_cache_path /tmp/nginx_cache/ levels=1:2 keys_zone=mycache:60m inactive=10m;

server {
 listen *:80;
 server_name thewebsite.loc;

 uwsgi_cache mycache;
 uwsgi_cache_valid any 1h;
 uwsgi_cache_key $request_uri;

location @uwsgi {
    include uwsgi_params;
    uwsgi_pass unix:///var/run/app/uwsgi.sock;
    uwsgi_read_timeout 120s;
  }

  location / {
    try_files $uri @uwsgi;
  }

  location /dynamic {
     uwsgi_cache off;
     try_files $uri @uwsgi;
  }
}

CAUTION: I did not test this config, I'm not sure if it will work

Upvotes: 1

Related Questions