Nginx-Konfiguration zum Zwischenspeichern statischer Dateien

Nginx-Konfiguration zum Zwischenspeichern statischer Dateien

Ich habe ein Problem damit, Nginx so zu konfigurieren, dass es eine AngularJS-Anwendung korrekt ausführt. Der Server ist wie folgt konfiguriert:

www.example.com we have the landing page of the application
www.example.com/app we have the application itself

der Pfad zur Anwendung lautet:

/usr/share/nginx/html/example.com/app/

und statische Dateien befinden sich im Folgenden:

/usr/share/nginx/html/example.com/app/public/app/assets

Jetzt möchte ich das Caching für alle HTML-Dateien sowohl auf der Zielseite als auch in der Anwendung auf „Kein Cache“ einstellen, den Cache für alle JS-, CSS- und Bilddateien jedoch auf 60 Tage festlegen.

Dies ist meine aktuelle Nginx-Serverkonfiguration:

server {
listen 80;

index index.html;

server_name example.com www.example.com;

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 60d;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}

location ^~ /app {
    alias /usr/share/nginx/html/example.com/app/public/;
    expires -1;
    add_header Pragma "no-cache";
}

location / {
    root /usr/share/nginx/html/example.com;
    expires -1;
    add_header Pragma "no-cache";
    add_header Cache-Control "no-store, no-cache, must-revalidate,  post-check=0, pre-check=0";
  }
}

Das Problem besteht nun darin, dass die Standortdirektive:

location ~* \.(?:ico|css|js|gif|jpe?g|png)$

wird nie ausgeführt, daher wird der Cache gemäß der Definition in der /app-Direktive auf „No-Cache“ eingestellt.

Irgendeine Idee?

Danke

Antwort1

Ein Zitat aus der Nginx-Dokumentation:

Wenn die längste übereinstimmende Präfixposition den Modifikator „^~“ hat, werden reguläre Ausdrücke nicht überprüft.

Das Problem liegt hier also in Ihrer location ^~ /appDefinition. Der ^Modifikator bewirkt, dass nginx den regulären Ausdruck für die Bilder ignoriert.

Sie sollten stattdessen verwenden location /app. An dieser Stelle ist kein Abgleich mit regulären Ausdrücken erforderlich, ein einfacher Präfixabgleich ist ausreichend.

Antwort2

Ich vermute, das Problem ist "~*", versuchen Sie es einfach mit "~". Beispiel:

location ~ \.(?:ico|css|js|gif|jpe?g|png)$

verwandte Informationen