Sunday, September 25, 2016

Re: nginx configuration to cache all endpoints but one


server {

listen 8000 default_server;

server_name example.com;

charset utf-8;

root /var/www/example;

location / {
include uwsgi_params;
uwsgi_pass unix:/var/www/awesome3-gamma/awesome3.sock;
}

# Set Cache for my Json api
# I DO NOT WANT TO CACHE /api/search !!!!

# I let expires 1M for json responses, and try with proxy_pass
# as https://groups.google.com/forum/embed/#!topic/openresty-en/apyaHbqJetU

location ~* \.(?:json)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}

location /api {
include uwsgi_params;
uwsgi_pass unix:/var/www/awesome3-gamma/awesome3.sock;
allow XX.XX.XXX.XXX:;
deny all;
}

}



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


# Attempt to delete single file cache - skip it
# http://serverfault.com/questions/493411/how-to-delete-single-nginx-cache-file
# curl -s -o /dev/null -H "X-Update: 1" mydomain.com
# proxy_cache_bypass $http_x_update;


# Here I set a proxy server:
# I try to proxy_pass /api/search
# with no cache settings


# Virtualhost/server configuration
server {
listen 80 default_server;

server_name example.com;

root /var/www/example;

charset utf-8;


location /api/search {
proxy_pass http://example:8000/api/search;
}


# can cache my API won't change
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 any 30s;
proxy_cache_valid 30d;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;

proxy_pass http://example.com:8000/api;
}
}

# like this, in my browser I still see all api request as
# add_header Cache-Control "no-cache, must-revalidate, max-age=0";

Hi M :)

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

For logs, I will send it in PVT!

thank you.

Il giorno domenica 25 settembre 2016 13:40:13 UTC+2, M Hashmi ha scritto:
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)

On Sun, Sep 25, 2016 at 3:50 AM, gg4u <luigi...@gmail.com> wrote:
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





Il giorno venerdì 23 settembre 2016 21:45:45 UTC+2, M Hashmi ha scritto:
Create a separate block to exclude certain endpoint above others. 

You can also try following approach.

Regrads,
Mudassar

On Fri, Sep 23, 2016 at 12:26 PM, gg4u <luigi...@gmail.com> wrote:
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

--
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...@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.

--
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...@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/d0ec5cdd-7fb0-43e5-aaa6-5922fd266c36%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

--
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-users@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/6cf33170-a729-41a2-99c0-ec251c479c13%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment