Pregunta

Me parece que no puede conseguir nginx para establecer caduca encabezados en mi estáticos activos en mi aplicación Rails.

Mi aplicación se implementa el uso de Phusion Passenger & nginx.

A continuación es el relacionado con la sección de mi archivo de configuración de 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;
        }
}

No estoy seguro de por qué no su configuración caduca encabezados en mi estática de los activos ( por ejemplo,/images/foo.png?123456 )

No estoy seguro de si tiene algo que ver con el pasajero o si mi ubicación regexp no es lo atrapa

¿Fue útil?

Solución 2

Así que acabé de encontrar la solución. Mi expresión regular era un poco, ya que no estaba tomando en cuenta la posibilidad de que la? Marca de tiempo no existía.

Esta expresión regular trabajó para mí.

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

Otros consejos

Sólo quería señalar que la fabricación de la marca de tiempo opcional es una mala idea – si no se incluye, a continuación, configuración de expires max está mal, porque no habría manera de actualizar el archivo.

También, la location la directiva en Nginx no puede ver la cadena de consulta, por lo que la solución publicado aquí nunca coincide con el 'opcional' timestamp.

Una solución adecuada (es decir, que envía la máxima de que expire sólo cuando se solicita el archivo con una marca de tiempo) sería:

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

Si la marca de tiempo no especificado, a continuación, se basan en Last-Modified y ETag, que son manejados automáticamente por Nginx.

Tal vez esto ayudará a:

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

cómo Nginx evalúa ubicación . ¿Estás seguro de que no tiene ninguna otra cadena location en su archivo de configuración que coincide con sus recursos estáticos antes de que su expresión regular if (-f $document_root/...) hace?

Por cierto, considerar el uso de try_files en lugar de <=>.

no hay necesidad de utilizar "romper" directiva, pero access_log fuera; será útil:

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

se puede ver el archivo de configuración completo en github: https://gist.github.com/711913

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top