Eu tenho um problema estranho com proxy nginx + proxy de configuração de cache para dois upstreams idênticos. Eu tenho dois servidores upstream idênticos configurados em uma configuração ativa / de backup. O cache está funcionando bem para um dos servidores, mas assim que eu alterno a configuração ativa / backup e recarrego o nginx, não obtenho nenhuma ocorrência de cache, e o log de erros é preenchido com os seguintes:
2017/06/15 10:14:21 [warn] 19048#19048: *2562 an upstream response is buffered to a temporary file /mnt/cache/temp/0000000504 while reading upstream, client: <CLIENT IP>, server: , request: "GET /secure/assets/file.ts?id=456 HTTP/1.1", upstream: "http://<UPSTREAM IP>:80/assets/file.ts", host: "server-host"
Agora, não consigo descobrir por que o nginx precisa armazenar em buffer as respostas de um dos upstreams e não do outro, já que os servidores upstream têm exatamente os mesmos arquivos e estão na mesma rede.
Agora, as partes relevantes da configuração:
http {
tcp_nodelay on;
proxy_cache_path /mnt/cache/cache keys_zone=one:20m inactive=24h loader_threshold=300 loader_files=200 max_size=180g;
proxy_cache_key $uri;
upstream master-cdn {
server cdn1 backup max_fails=10 fail_timeout=60s;
server cdn0 max_fails=10 fail_timeout=60s;
keepalive 10;
}
proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_403 http_404;
server {
listen 80;
if_modified_since off;
add_header Cache-Control no-cache;
add_header Pragma "no-cache";
root /var/www/html;
location /assets {
sendfile on;
tcp_nopush on;
internal;
proxy_pass http://master-cdn;
proxy_cache one;
proxy_cache_min_uses 1;
proxy_cache_lock on;
proxy_cache_valid 200 24h;
proxy_temp_path /mnt/cache/temp;
}
}
Observação: os clientes estão acessando a /secure
url, que é enviada para um servidor de aplicativos, que usará o cabeçalho X-Accel-Redirect
para informar ao nginx para veicular o arquivo estático a partir do local interno.
Toda a configuração funciona bem, mas apenas com o servidor upstream cdn0
. Assim que eu movo a instrução backup
para o servidor cdn0
e recarrego o nginx, eu recebo o buffer do upstream e os erros do cache.
Alguém tem alguma idéia sobre como depurar isso ainda mais?
Obrigado antecipadamente.