Pergunta

Eu não consigo obter nginx para definido expirar cabeçalhos nos meus ativos estáticos em meu aplicativo Rails.

Meu aplicativo é implementado utilizando Phusion Passenger & nginx.

Segue-se a respectiva secção do meu arquivo de configuração nginx

server {
        listen  80;
        server_name my.domain.tld;
        root /home/deploy/my.domain.tld/current/public;
        passenger_enabled on;
        access_log off;

        location ~* \.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {
                expires max;
                break;
        }

        if (-f $document_root/system/maintenance.html) {
                rewrite ^(.*)$ /system/maintenance.html break;
        }
}

Eu não sei por que não o seu ajuste expira cabeçalhos nos meus ativos estáticos (por exemplo /images/foo.png?123456)

Eu não tenho certeza se ele tem algo a ver com passageiro ou se o meu regexp localização, apenas is not captura-lo

Foi útil?

Solução 2

Então eu acabei de encontrar a solução. Meu regexp foi um pouco fora, como eu não estava levando em conta a possibilidade de que o? Timestamp não existia.

Esta regexp funcionou para mim.

location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {

Outras dicas

Apenas queria salientar que fazer o opcional timestamp é uma má idéia -. Se não for incluída, em seguida, definindo expires max está errado, pois não haveria nenhuma maneira de refrescar o arquivo

Além disso, a directiva location em Nginx não pode ver a string de consulta, então a solução postada aqui não combina com o 'opcional' timestamp.

A solução adequada (ou seja, aquele que envia o máximo única expira quando o arquivo foi solicitado com um timestamp) seria:

location ~* \.(js|css|png|jpg)$ {
  if ($query_string ~ "^[0-9]+$") {
    expires max;
    break;
  }
}

Se o timestamp não for especificado, então você confiar em Last-Modified e ETag, que são manipulados automaticamente por Nginx.

Talvez isto ajude:

location ~* ^.*\.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {

Além disso, leia como Nginx avalia localização . Tem certeza de que não têm qualquer outra location corda em seu arquivo de configuração que corresponda aos seus recursos estáticos antes de seu location regexp faz?

BTW, considere o uso try_files vez de if (-f $document_root/...).

não há necessidade de usar "quebrar" directiva, mas access_log off; será útil:

  location ~* \.(png|gif|jpg|jpeg|css|js|swf|ico)(\?[0-9]+)?$ {
      access_log off;
      expires max;
      add_header Cache-Control public;
  }

Você pode ver arquivo de configuração completa no github: https://gist.github.com/711913

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top