Nginx, proxy reverso e armazenamento em cache apenas algumas das rotas

1

Eu tenho uma API RESTful em execução no Reino Unido, mas de certa forma é muito lenta para os usuários da UA. Então, o que eu gostaria de fazer, colocar um proxy nginx em um servidor AU e armazenar em cache algumas das rotas por 1, 10 e 60 minutos e não armazenar o resto em cache.

Não tenho certeza se isso é possível com o nginx, mas o que fiz foi o seguinte:

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;
    }


}

Está funcionando se eu solicitar /api/a ou /api/b ou qualquer outra URL, mas se eu enviar uma solicitação para algo como /api/a/some_other_var , é novamente, caindo para o último local, em vez do primeiro. Então, o que estou fazendo de errado?

    
por Tim 27.04.2015 / 18:38

0 respostas