Vraag Instelling vervalt headers voor statische inhoud die wordt geserveerd via nginx


Ik gebruik nginx om mijn statische inhoud te serveren. Kan ik de headers voor verlopen instellen voor elk bestand dat aan een specifieke regel voldoet? Kan ik bijvoorbeeld de verlopen-header instellen voor alle bestanden met de extensie '.css'?


85
2018-06-10 07:19


oorsprong




antwoorden:


Ik geef de voorkeur aan een completere cache-header, naast wat meer bestandsextensies. De '?' voorvoegsel is een 'niet-vastleggend' teken, nginx maakt geen $ 1 aan. Het helpt om onnodige belasting te verminderen.

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

112
2017-11-25 21:07



Al mijn statische bestanden zijn niet gevonden na het toevoegen van dat. - Jürgen Paul
@JackSpairow: Ik kan niet echt uitleggen waarom dat is gebeurd, want het heeft altijd voor me gewerkt. Lopen jullie Nginx de module add_header missen? Dit soort zaken heeft echt een beperkte reikwijdte, weet je zeker dat een andere vertraging geen probleem is in combinatie? - J. M. Becker
Waarschijnlijk had een ander blok een definitie voor de statische bestanden met een root set, in dat geval moet u de richtlijnen aan dat blok toevoegen. (Ik weet dat dit 2 uur te laat is, maar voor toekomstige burgers) - aularon
Ik waardeer persoonlijk opheldering, vooral voor toekomstige gebruikers, omdat ze vaak lang na de oorspronkelijke post verschijnen. +1: P - J. M. Becker
het gebruiken van dit verprutst volledig mijn wordpresswebsite. CSS en afbeeldingen worden niet getoond. is er ergens een ander conflict? - user1641443


server {
    ...

    location ~* \.css$ {
       expires 30d;
    }
    ...
}

De location richtlijn

De expires richtlijn


21
2018-06-10 07:23





Ik heb onvoldoende reputatie om te reageren op de reden waarom het geaccepteerde antwoord ertoe zou leiden dat de bestanden niet meer zouden verschijnen, maar ik bedacht het en zou graag willen helpen!

Verkorte versie:

Zorg ervoor dat u een hoofdmap hebt die is opgegeven voor uw locatiestand op afbeeldingen als u geen algemene map hebt ingesteld!

Lange versie hieronder:


Allereerst was mijn methode om deze oplossing te implementeren echt vergelijkbaar dit antwoord, waar u de regel schrijft (zoals in het geaccepteerde antwoord):

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

in een bestand img-cache.conf

en neem dat bestand dan op in uw server {...} richtlijn.

Mijn voorbeeld van somesite.com in mijn map met beschikbare sites:

 #Image Caching
 include /etc/nginx/conf/img-cache.conf;

Op die manier kunt u het locatiearchief voor afbeeldingscache toevoegen aan meerdere sites die u mogelijk gebruikt.


Ten tweede, ik heb een situatie waarin mijn / var / www / twee mappen bevat die ik toesta als public_html - beveiligen en trainen, dus ik moet specifieke locatievlakken maken in de serverrichtlijn van mijn site die deze mappen uitkiest.

Als zodanig, Ik heb geen globale root-directory ingesteld.

Dus wanneer u uw afbeeldingslocatieblokken maakt, u voorziet hen misschien niet van een root-directory om naar de afbeeldingen te zoeken!

Mijn oplossing was toen om:

location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
        root /var/www/;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        try_files $uri 404;
}

location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
        root /var/www/secure;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        try_files $uri 404;
}

12
2018-01-31 21:43



+1 om dit herbruikbaar te maken .conf. De juiste map in nginx/1.14.0 (Ubuntu) lijkt te zijn /etc/nginx/snippets/. - Jan Werkhoven


U kunt ook de vervaltijd instellen op het maximum. Hier is de richtlijn die ik gebruik voor css en js.

# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
    access_log off;
    expires max;
}

9
2018-06-10 08:41



Ik zou de root-richtlijn alleen in het blok server {} gebruiken, bij gebruik op sublocaties leidt dit tot onverwachte gevolgen. Je hebt de pauze niet nodig; ofwel, omdat u zich niet in een if {} -blok bevindt - Dave Cheney
Je hebt gelijk. Vergeten om dit op te ruimen. Bewerkt om dit weer te geven. - Jauder Ho


Alle bovengenoemde oplossingen ontkennen de mogelijkheid om verschillende aliassen voor verschillende paden te hebben. Ook om al je verschillende cache-expiraties op één plek te hebben, zou je nginx-map op de volgende manier moeten gebruiken.

...

# Expires mappings
map $sent_http_content_type $expires {
    default                    off;
    text/html                  epoch;
    text/css                   max;
    application/javascript     7d;
    ~image/                    max;
}

...

server {
   listen ...;

   expires $expires;
   location /assets/ {
      # It is now possible to serve some resources from different path
      alias /var/www/my_other_path/
   }

   # and have them all have same expirations
   location / {
       try_files $uri $uri/ /index.html;
   }
...
}

Off schakelt caching uit, epoch (voor unix epoch) resulteert in het altijd opnieuw ophalen van de bron, max stelt de datum in op de maximale browserwaarde.

De ~ afbeelding / komt overeen met elk afbeeldingstype.

Meer over nginx-kaarten op http://nginx.org/en/docs/http/ngx_http_map_module.html.


2
2018-01-04 19:58



Merk op dat als $sent_http_content_type is "text/css;charset=UTF-8" de bovenstaande uitdrukking zal mislukken. - pachanka


Als je een plaats hebt waar al je statische bestanden staan, kan zoiets als dit ...

 location /static {
            your/location/to/static/files/static;
            expires 30d;
            add_header Cache-Control "public";
    }

Het geaccepteerde antwoord zorgde ervoor dat nginx geen van mijn statische bestanden kon vinden. Niet echt zeker waarom, maar dit is een eenvoudig alternatief.


0
2018-02-25 03:12





Aangezien dit een heel oude thread is, vond ik een geweldige tutorial.

Misschien wil je het eens bekijken

Hoe browsercaching met de header-module van Nginx op Ubuntu 16.04 wordt geïmplementeerd


-1
2018-05-04 04:18



Over het algemeen fronsen we bij het linken naar artikelen en niet ook de inhoud hier, omdat links de neiging hebben om te veranderen of te vervallen. - Unkwntech