Rails - Nginx não armazena em cache imagens

1

Eu tenho um VPS onde estou executando meu aplicativo Rails usando Nginx e Unicorn. Eu consegui adicionar cabeçalhos de expiração a arquivos JS e CSS, mas não posso forçar o Nginx a armazenar imagens também (de acordo com o YSlow e o Google PageSpeed Insights).

Aqui está o meu bloco de servidores:

server {
  listen   80;
  root /home/rails/public;
  server_name _;
  index index.htm index.html;

  location / {
    try_files $uri/index.html $uri.html $uri @app;
  }

  location ~* ^.+\.(jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ {
    try_files $uri @app;
  }

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }

  location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires max;
  }

}

A última parte do código é como consegui chache de CSS e JS, mas não está funcionando para imagens. O que estou fazendo de errado? Devo fazer algumas alterações adicionais em outro lugar?

Muito obrigado!

    
por kellins 01.10.2014 / 11:03

1 resposta

1

Você tem dois blocos de localização correspondentes às imagens:

location ~* ^.+\.(jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ {
    try_files $uri @app;
}

e

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires max;
}

O Nginx irá parar no primeiro bloco de localização de regex correspondente, de forma que o segundo bloco de localização seja nunca usado para arquivos jpg, jpeg, png, gif e ico.

Atualizar : detalhes para o cache de fallback

server {
  listen   80;
  root /home/rails/public;
  server_name _;
  index index.htm index.html;

  location / {
    try_files $uri/index.html $uri.html $uri @app;
  }

  location ~* ^.+\.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires max;
    try_files $uri @app;
  }

  location ~* ^.+\.(zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ {
    try_files $uri @app;
  }

  location @app {
    if ($uri ~* ^.+\.(jpg|jpeg|png|gif|ico|css|js)$) {
        expires max;
    }
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }

}
    
por 01.10.2014 / 11:22