Nginx、反向代理和仅缓存部分路由

Nginx、反向代理和仅缓存部分路由

我有一个在英国运行的 RESTful API,但不知何故,它对澳大利亚用户来说太慢了。所以我想做的是,在澳大利亚服务器上放置一个 nginx 代理,并缓存一些路由 1、10 和 60 分钟,而根本不缓存其余路由。

我不确定 nginx 是否可以实现这一点,但这就是我所做的;

server {
    listen 80;
    server_name proxycache.domain.com;

    access_log  /var/log/nginx/reverse.log upstreamlog;

    proxy_ignore_headers    Set-Cookie;
    proxy_hide_header       Set-Cookie;

    proxy_ignore_headers    Cache-Control;
    proxy_ignore_headers    Vary;
    proxy_ignore_headers    X-Accel-Redirect;
    proxy_ignore_headers    X-Accel-Expires;
    proxy_ignore_headers    X-Accel-Limit-Rate;
    proxy_ignore_headers    X-Accel-Buffering;
    proxy_ignore_headers    X-Accel-Charset;
    proxy_ignore_headers    Expires;

    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host data.domain.com;

    add_header X-Cache $upstream_cache_status;

    proxy_redirect off;

    proxy_cache             STATIC;
    proxy_cache_key         $host$uri$is_args$args;
    proxy_cache_use_stale   error timeout invalid_header updating http_500 http_502 http_503 http_504;
    proxy_cache_min_uses    1;

    location /api/a {
        proxy_pass  http://data.domain.com/api/a;
        proxy_cache_valid   200 301 302 1m;
        break;
    }

    location /api/b {
        proxy_pass  http://data.domain.com/api/b;
        proxy_cache_valid   200 301 302 60m;
        break;
    }

    location / {
        proxy_pass  http://data.domain.com/;
        proxy_cache_valid   200 301 302 0s;
        break;
    }


}

如果我请求/api/a/api/b或任何其他 URL,它都可以正常工作,但如果我再次发送类似的请求/api/a/some_other_var,它会再次转到最后一个位置而不是第一个位置。那么我做错了什么?

相关内容