nginx nicht Einstellung abläuft Header on Rails statischen Vermögenswerte
-
22-08-2019 - |
Frage
Ich kann nicht zu bekommen nginx scheint Header auf meinen statischen Vermögenswerte in meiner Rails-Anwendung zu setzen abgelaufen ist.
Meine App ist im Einsatz mit Phusion Passagiere & nginx.
Im Folgenden finden Sie die entsprechenden Abschnitt meiner nginx config-Datei
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;
}
}
Ich bin mir nicht sicher, warum es nicht Einstellung Header auf meiner statischen Vermögenswerte abläuft (z /images/foo.png?123456)
Ich bin mir nicht sicher, ob es etwas mit Passagiere oder wenn meine Lage regexp zu tun ist nicht nur fangen sie
Lösung 2
So landete ich die Lösung zu finden, auf. Mein regexp war ein bisschen weg, da ich nicht berücksichtigt wurde die Möglichkeit, dass die? Zeitstempel gibt es nicht.
Dieses regexp arbeitet für mich.
location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {
Andere Tipps
Ich wollte nur, dass der Zeitstempel optional zu machen, darauf hinzuweisen ist eine schlechte Idee -. Wenn es nicht enthalten ist, dann expires max
Einstellung falsch ist, da es keine Möglichkeit, die Aktualisierung die Datei würde
Auch die location
Richtlinie in Nginx kann den Query-String nicht sehen, so erzielte die Lösung hier paßt nie die 'optional' Zeitstempel.
Eine richtige Lösung (dh eine, die die maximalen sendet erlischt erst, wenn die Datei mit einem Zeitstempel angefordert wurde) wäre:
location ~* \.(js|css|png|jpg)$ {
if ($query_string ~ "^[0-9]+$") {
expires max;
break;
}
}
Wenn der Zeitstempel nicht angegeben ist, dann setzen Sie auf Last-Modified
und ETag
, die automatisch von Nginx behandelt werden.
Vielleicht wird dies helfen:
location ~* ^.*\.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {
Lesen Sie auch wie Nginx wertet Standort . Sind Sie sicher, Sie haben keine andere Zeichenfolge location
in Ihrer Konfigurationsdatei, die Ihre statischen Ressourcen übereinstimmt, bevor Ihr regexp location
tut?
BTW, sollten Sie mit try_files statt if (-f $document_root/...)
.
gibt es keine Notwendigkeit „brechen“ Richtlinie zu verwenden, aber access_log aus; wird nützlich sein:
location ~* \.(png|gif|jpg|jpeg|css|js|swf|ico)(\?[0-9]+)?$ {
access_log off;
expires max;
add_header Cache-Control public;
}
Sie können vollständige Konfigurationsdatei auf Github sehen: https://gist.github.com/711913