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?
Tags nginx reverse-proxy