nginx configuration to cache all endpoints but one

118 views
Skip to first unread message

gg4u

unread,
Sep 23, 2016, 3:26:22 PM9/23/16
to Django users
Hello,

I want to cache all api endpoints except of one: /api/search endpoint.
Do I need to specify settings for each of the endpoints?

My configuration use nginx as server on port 8000 and port 80 as virtual proxy server.
Please not I removed settings not related to question to minify the post!

server {
listen 8000 default_server;

# Set Cache for my Json api
                # I want to cache everything but /api/search endpoint
location ~* \.(?:json)$ {
 expires 1M;
 access_log off;
 add_header Cache-Control "public";
}

           
location /api {
include uwsgi_params;
uwsgi_pass unix:/var/www/awesome3-gamma/app.sock;
allow [MY DNS];
deny all;
}
}



# Set cache dir
proxy_cache_path /tmp/nginx levels=1:2 keys_zone=my_zone:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";

# Virtualhost/server configuration
server {
listen   80  default_server;

# here I cache /api
        # how to avoid caching /api/search ?
        
location /api {
add_header X-Proxy-Cache $upstream_cache_status;
proxy_cache my_zone;
proxy_cache_use_stale updating;
proxy_cache_lock on;
        proxy_cache_valid 30d;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
          proxy_pass [my site route api]
}
}


I am looking at:

tried with following block on server listening on port 8000

location /api/search {
    expires off;
}

but got error 500.

Must it go before /api location, afterwards, or it does not matter the order?
Any idea of what I am missing ?

I would like to avoid specify same settings for all API endpoints

M Hashmi

unread,
Sep 23, 2016, 3:45:45 PM9/23/16
to django...@googlegroups.com
Create a separate block to exclude certain endpoint above others. 

You can also try following approach.

Regrads,
Mudassar

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/2a459135-89fa-45d5-8b4e-79b5377c11a8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

gg4u

unread,
Sep 25, 2016, 6:50:56 AM9/25/16
to Django users
Hi Hashmi,

thank you for your suggestion.

I tried to set proxy_pass for the location I don't want to cache, but I don't see caching working properly on my browser.

Could you give a look?
I will attach a mockup of settings,may you want to comment or edit it there so that is more readable to me and also other people?

I want to cache all /api location, except /api/search

In attachment what I tried (I removed from settings things not relevant to this).

thank you,
Luigi



To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
test-caching

M Hashmi

unread,
Sep 25, 2016, 7:40:13 AM9/25/16
to django...@googlegroups.com
Send me settings of /etc/nginx/nginx.conf and then /etc/sites-available/app.
The format of the file is not opening up on my system as I am on windows right now.

Also if you have some logs that would be great. 
Regards,
M (call me M)

To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.

To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.

gg4u

unread,
Sep 25, 2016, 9:48:57 AM9/25/16
to Django users
Hi M :)

thank you for helping out!
Here a .txt version of settings.

For logs, I will send it in PVT!

thank you.
test-caching.txt

gg4u

unread,
Oct 2, 2016, 12:58:51 PM10/2/16
to Django users
Hi M,

have you had possibility to take a closer look to setting files and logs?

M Hashmi

unread,
Oct 2, 2016, 1:19:01 PM10/2/16
to django...@googlegroups.com
Hi, I've checked all the logs and as per my limited understanding you need to open up a ticket with Nginx support.

Or may be I am not able to understand it right.

As I've done it during my practice that I would create two blocks. The upper block will contain urls/files that are not to be accessed. But in your case if this is not working then this is something I can't help you with due to limited time to research the issue. I tried to create your problem at my end but couldn't.

Please open up issue with Nginx support team and they will get you a fix in 24 hours.

Note: This escaped from my mind due to a lot of work and I humbly apologize if you kept waiting for my answer. As per the code of conduct for this group everybody will try to help you out with whatever knowledge or information they have otherwise.

Good luck. :-)

Thanks.
Regards,
Mudassar

To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.

To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
Reply all
Reply to author
Forward
0 new messages