server {
listen 80;
server_name site.*;
# site traffic from the browser to the API should come through here
location /api/dev {
if ($request_method !~ ^(GET|HEAD)$ ) {
return 405;
}
# tell nginx not to modify the response for URLs from the proxied process.
proxy_redirect off;
# Send appropriate headers through
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
# set expiration headers for site calls to be short
expires +10s;
# Only cache valid HTTP responses
srcache_store_statuses 200 301 302;
# only allow pull methods
srcache_methods GET HEAD;
set $key $request_method$request_uri;
set_escape_uri $escaped_key $key;
srcache_fetch GET /redis-get $key;
srcache_store PUT /redis-set key=$escaped_key&exptime=300;
rewrite ^/api/dev/(.*)$ /$1 break;
}
location = /redis-get {
internal;
set $redis_key $args;
set_hashed_upstream $backend redis_cluster $redis_key;
redis_pass $backend;
}
location = /redis-set {
internal;
set_unescape_uri $exptime $arg_exptime;
set_unescape_uri $key $arg_key;
set_hashed_upstream $backend redis_cluster $key;
redis2_query set $key $echo_request_body;
redis2_query expire $key $exptime;
redis2_pass $backend;
}
}