Come cancellare la cache di nginx?

Io uso nginx come la parte anteriore del server, ho modificato il file CSS, ma nginx è ancora in servizio i vecchi.

Ho provato a riavviare nginx, nessun successo e ho cercato su google, ma non ho trovato un modo valido per deselezionarla.

Alcuni articoli dicono che si può solo eliminare la directory della cache: var/cache/nginx, ma non esiste una directory sul mio server.

Cosa devo fare ora?

  • Ulteriori dettagli sulla configurazione di Nginx sarebbe di molto aiuto. Stai usando proxy_cache ?
  • No, ho solo utilizzato il valore di default, e ho cercato su string cache, non trovato nel file di configurazione
  • Nginx non memorizza nella cache per impostazione predefinita.
  • Sono in esecuzione in una virtualbox/vargant vm? Se è così, provare a disattivare sendfile, come loro non giocano bene insieme.
  • no, è in esecuzione in un server autonomo
  • sei sicuro che la cache è su nginx lato, quindi? Hai verificato il comportamento con uno strumento come il curl? Spesso, un problema come questo è solo il caching lato client non richiede una risorsa aggiornata perché è stato detto che il vecchio risorsa sarà valida per un lungo periodo di tempo scade max; o qualcosa di simile.
  • Quindi devo lasciare sendfile per server live, ma per virtualbox/vagabondo vm? o devo tenerlo spento in tutti i tempi?
  • Grazie. Girando sendfile off risolto un problema che aveva ingerito ore di tempo. Guarda come il modo per andare è quello di impostare sendfile spento quando è in Vagrant, per server reali.
  • Ho trovato che l’utilizzo di google chrome in incognito era un modo per eliminare la cache del browser, senza l’eliminazione di tutta la mia storia, in modo che le modifiche vorresti aggiornare come ho modificato il file e aggiornata del browser.

InformationsquelleAutor Freewind | 2011-06-04



20 Replies
  1. 178

    Ho avuto lo stesso problema – sono stato in esecuzione il mio nginx in Virtualbox. Non ho fatto in cache attivata. Ma guarda come sendfile è stato impostato per on in nginx.conf e che è stato la causa del problema. @kolbyjack detto sopra nei commenti.

    Quando ho spento sendfile – ha funzionato bene.

    Questo perché:

    Sendfile è usato per copiare i dati tra un descrittore di file e l’altro‘ e a quanto pare ha qualche problema reale quando viene eseguito in una macchina virtuale ambiente, o almeno quando eseguito tramite Virtualbox. La svolta in questa config off in nginx causa di file statici per essere servito, attraverso un metodo diverso e le modifiche verranno applicate immediatamente e senza dubbio

    È legato a questo bug: https://www.virtualbox.org/ticket/12597

    • Funziona come pubblicizzato, ma un link e alcune informazioni circa lo scopo di sendfile sarebbe più apprezzato di un account personale. Modificare una voce del diario in una risposta di fatto e di ottenere il mio voto.
    • Fare riferimento a link
    • Nel mio caso, la soluzione alternativa è attivare gzip per questi tipi di file. In ogni modo il problema è risolto.
    • Grazie e kolbyjack mille per la risposta. Ha salvato la mia vita.
    • Ho usato il seguente comando ‘sudo vim /etc/nginx/nginx.conf’ e cambiamento ‘sendfile su’ a ‘sendfile off’
    • Questa è l’unica soluzione che posso trovare ovunque, ma in realtà ho bisogno di usare sendfile quindi non posso disattivarlo 🙁
    • Ho spento sendfile. Senza fortuna.
    • Stesso. Sto utilizzando una server. Centos 7.2
    • Si voltò sendfile off e modifiche è apparso subito. In esecuzione su Amazon CE l’istanza virtuale. Vorrei mantenere questa impostazione, anche se…

  2. 96

    Si può anche bypassare/re-cache su un file, in base

    proxy_cache_bypass $http_secret_header;
    

    e, come bonus, è possibile restituire questa intestazione per vedere se è stato ottenuto dalla cache (restituirà ‘COLPO’) o dal server di contenuti (restituirà ‘BYPASS’).

    add_header X-Cache-Status $upstream_cache_status;
    

    scadenza/aggiornare la cache dei file, utilizzare curl o qualsiasi client rest a fare una richiesta per la pagina memorizzata nella cache.

    curl http://abcdomain.com/mypage.html -s -I -H "secret-header:true"
    

    questo restituirà una copia aggiornata della voce e anche la sostituzione di ciò che è in cache.

    • Perché posso solo upvote questo momento? Voglio fare una marea 🙂
    • Questo può solo aggiornare le pagine memorizzate nella cache quando la nuova pagina è cacheable così. Se si dispone di rimuovere una pagina 404 o altri errori sono ora serviti da backend), la pagina che lancia ora un Set-Cookie o un “Content-Control: private” intestazione, il contenuto della cache, non sarà “invalidato”.
    • Questo “add_header X-Cache-Stato di $upstream_cache_status;” è una caratteristica fredda!
    • grazie mille. bel suggerimento per invalidazione della cache, c’è così poco tutorial su nginx
    • Questo ha cambiato da quando hai postato? Posso ottenere con successo una nuova copia con il “segreto ” intestazione”, ma non appena ho rimuovere l’intestazione, ho la versione memorizzata nella cache di nuovo…
    • Non funziona per nulla, anzi, con proxy_cache. Sembra che dipende dalla fortuna!
    • Questo ha funzionato per me. Tuttavia, io non sono sicuro esattamente dove il nginx cache si trova …
    • Funziona esattamente come pubblicizzato sul mio DigitalOcean Ubuntu 16.04 NodeJS istanza. Ha lottato per ore con metodi diversi.

  3. 57

    A meno che non hai configurato una cache zona via proxy_cache_path e quindi usato (per esempio, in una posizione di blocco), tramite:
    proxy_cache nulla sarà memorizzata.

    Se l’avete fatto, tuttavia, quindi secondo l’autore di nginx, semplicemente la rimozione di tutti i file della directory della cache è abbastanza.

    Modo più semplice: find /path/to/your/cache -type f -delete

    • ricevo nel mio log di errore dopo l’eliminazione del file: [crit] 1640#0: unlink() "/path/to/cache/85/1cc5328db278b328f2c200c65179ad85" failed (2: No such file or directory)
    • Più volte o solo una volta? Non dovrebbe essere un problema effettivo. Probabilmente significa solo che il gestore della cache provato a cancellare un file che è già eliminata. Forse ricarico nginx (nginx-s ricarica) potrebbe aiutare se si ottiene il messaggio più volte. (Non sono sicuro se che reinizializza il gestore della cache, troppo.)
    • sì, mi cancella automaticamente la cache per il mio sito web da uno script ogni volta che ho distribuire un cambiamento, e ricaricare il nginx non risolvere il problema o.
    • Nop Nginx cache di qualcosa, anche se non utilizzare il proxy roba, ma è un bug con Nginx + VirtualBox.
    • Che suoni piuttosto vago. Potresti approfondire questo punto? Non sembra come esso è legato al tema a portata di mano qui.
    • Ricerca il server nginx. conf file per proxy_cache_path per trovare il percorso per la cache come grep -r proxy_cache_path /etc/nginx/ il mio era impostato in /etc/nginx/conf.d/proxy_cache.conf come /var/lib/nginx/proxy
    • Sì, si prega di dirci di più a riguardo di bug penso di essere una vittima di esso! Ho una VM con nginx, la parola “cache” non appare in alcun del mio file di configurazione e spegnimento sendfile non ha risolto per me. So che non è la cache del browser, perché in PHP, echo(file_get_contents("http://my.vm/css/style.css")); servirà il vecchio contenuto.
    • Mai mente – a quanto pare c’è stata una reazione ritardata dell’atto di spegnimento sendfile e il riavvio di nginx – la prima volta dopo che è stata la stessa, ma ora sembra essere la risposta ai cambiamenti.

  4. 20

    È possibile eliminare la directory della cache di nginx o È possibile cercare file specifici:

    grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*
    

    E cancellare un solo file per nginx aggiornare.

    • Per ottenere l’esatto colpo, si può aggiungere $ per il termine di ricerca. Come grep -lr 'http://mydomain.pl/css/myedited.css$' /var/nginx/cache/*
    • Purtroppo ho il seguente output grep: /var/nginx/cache/*: No such file or directory sto usando Ubuntu 14.04.3 LTS e nginx/1.8.1. Qualche idea?
    • Provare le seguenti operazioni per grep i file in /var/nginx/cache: sudo find /var/nginx/cache -type f -exec grep -l '/css/myedited.css' {} \;
  5. 15

    Ci sono due risposte a questa domanda.

    • Uno per nginx come invertire la cache
    • Altro per pulire la cache del browser l’intestazione di ingresso (questo)

    Uso:

    expires modified +90d;
    

    E. G.:

    location ~* ^.+\.(css|js|jpg|gif|png|txt|ico|swf|xml)$ {
        access_log off;
        root /path/to/htdocs;
        expires modified +90d;
    }
    
    • Il “modificato” magi ha funzionato per me. Tks!
    • Ho provato questa implementazione, perché sto avendo problema simile. Tuttavia, dopo che ho fatto la modifica e mostra la predefinito Nginx pagina. Sto usando Niginx come LB con proxy, ho bisogno di cambiare root forse?
  6. 10

    Nel mio installare nginx ho trovato ho dovuto andare a:

    /opt/nginx/cache
    

    e

    sudo rm -rf *
    

    in quella directory. Se si conosce il percorso per nginx installare e può trovare la directory della cache stessa può funzionare per voi. Essere molto attenti con il rm -rf comando, se siete in torto directory è possibile cancellare l’intero disco rigido.

    • è necessario riavviare il server NGINX. dopo di che
    • E questa è la parte negativa
  7. 10

    Ho trovato questo utile

    grep -lr 'jquery.js' /path/to/nginx/cache/folder/* | xargs rm
    

    Di ricerca, e, se trovato, quindi eliminare.

  8. 7

    Ho eseguito un semplice script bash che prende tutti i 10 secondi per fare il lavoro e mi manda una mail quando fatto.

    #!/bin/bash
    sudo service nginx stop
    sudo rm -rf /var/cache/nginx/*
    sudo service nginx start | mail -s "Nginx Purged" [email protected]
    exit 0
    
  9. 6

    Ho avuto anche questo problema.

    • Non riusciva a trovare nginx/cartella cache
    • sendfile era fuori

    Mio dominio utilizza cloudflare.com per il DNS (ottimo servizio!). Aha! Non c’è stato:

    cloudflare.com -> cache -> eliminare la Cache (ho eliminato tutto)
    Che ha risolto il mio problema!

    • Questo elimina bordo Cloudflare cache. Non cancellare la cache di Nginx sul proprio server.
    • Come un consiglio, penso che è una risposta valida .
    • Questo è stato eccellente risposta. Stavo scavando ore perché alcuni file sono ancora in fase di cache e non poteva indovinare che era CloudFlare ‘colpa’. Grazie!
  10. 5

    Per coloro che altre soluzioni non funzionano, controllare se si sta utilizzando un servizio di DNS come CloudFlare. In questo caso attivare la “Modalità di Sviluppo” o la “svuota Cache” strumento.

  11. 5

    Si prega di prendere nota che proxy_cache_bypass può dare un mondo di male se la vostra applicazione non restituire un cacheable risposta per quella specifica richiesta in cui si innescano.

    Se, per esempio, un’applicazione invia un cookie con ogni prima richiesta, quindi uno script che attiva proxy_pass_bypass via curl sarà probabilmente ottenere il cookie nella risposta, e nginx si non uso che di risposta per aggiornare l’elemento memorizzato nella cache.

  12. 5

    Abbiamo una grande cache di nginx (gigabyte), che ogni tanto hanno bisogno di strofinare. Ho lavorato fuori uno script che all’istante si cancella la cache (per quanto riguarda Nginx è interessato) e poi rimuove la cache directory senza far morire di fame la principale applicazione per l’I/o su disco

    In sintesi:

    1. Spostare la cartella cache in una nuova posizione (sullo stesso filesystem!) (questo non danneggiano i descrittori di file aperti)
    2. Ricreare la cache originale cartella vuota
    3. Ricaricare Nginx (grazioso di ricarica, dove nginx permette ai vecchi lavoratori finire le richieste in corso)
    4. Rimuovere i vecchi dati memorizzati nella cache

    Ecco lo script, su misura per Ubuntu 16.04 LTS, con la cache si trova a /mnt/nginx-cache:

    #!/bin/bash
    set -e
    
    TMPCACHE=`mktemp --directory --tmpdir=/mnt nginx-cache-XXXXXXXXXX`
    TMPTEMP=`mktemp --directory --tmpdir=/mnt nginx-temp-XXXXXXXXXX`
    
    # Move the old cache folders out of the way
    mv /mnt/nginx-cache $TMPCACHE
    mkdir -p /mnt/nginx-cache
    chmod -R 775 /mnt/nginx-cache
    chown www-data:www-data /mnt/nginx-cache
    
    mv /mnt/nginx-temp $TMPTEMP
    mkdir -p /mnt/nginx-temp
    chmod -R 775 /mnt/nginx-temp
    chown www-data:www-data /mnt/nginx-temp
    
    # Tell Nginx about the new folders.
    service nginx reload
    
    # Create an empty folder.
    rm -rf /mnt/empty
    mkdir -p /mnt/empty
    
    # Remove the old cache and old temp folders w/o thrashing the disk...
    # See http://serverfault.com/questions/546177/how-to-keep-subtree-removal-rm-rf-from-starving-other-processes-for-disk-i
    # Note: the `ionice` and `nice` may not actually do much, but why not?
    ionice -c 3 nice -19 rsync -a --delete /mnt/empty/$TMPCACHE
    ionice -c 3 nice -19 rsync -a --delete /mnt/empty/$TMPTEMP
    rm -rf $TMPCACHE
    rm -rf $TMPTEMP
    
    rm -rf /mnt/empty
    

    E nel caso in cui è utile, ecco il Nginx config usiamo:

    upstream myapp {
        server localhost:1337 fail_timeout=0;
    }
    
    proxy_cache_path /mnt/nginx-cache/app levels=2:2:2 keys_zone=app_cache:100m inactive=1y max_size=10g;
    proxy_temp_path  /mnt/nginx-temp/app;
    
    server {
        listen   4316 default;
        server_name  myapp.com;
    
        location /{
            proxy_pass http://appserv;
            proxy_cache app_cache;
            proxy_cache_valid 200 1y;
            proxy_cache_valid 404 1m;
        }
    }
    
  13. 3
    find /etc/nginx/cache_folder -type d -exec rm -rvf {} \;
    mkdir /etc/nginx/cache_folder
    service nginx restart
    

    Essere attenti a specificare correttamente il percorso corretto.

  14. 3

    Per coloro che hanno provato a cancellare la cache di nginx file, e non ha funzionato o ha lavorato in modo discontinuo, avere uno sguardo alla vostra impostazione per open_file_cache. Se questo è abilitato e configurato per la cache di un descrittore di file per un lungo periodo di tempo, quindi Nginx può ancora vedere una versione del file nella cache, anche dopo che è stato eliminato dal disco. Ho dovuto ridurre open_file_cache_valid a 1s (non sono sicuro se questo è essenzialmente lo stesso come disabilitare la cache dei file completamente).

  15. 2

    Se si desidera cancellare la cache di specifici file, allora è possibile utilizzare il proxy_cache_bypass direttiva. Questo è il modo per farlo

    location /{
        proxy_cache_bypass $cookie_nocache $arg_nocache;
        # ...
    }
    

    Ora, se si desidera ignorare la cache si accede al file passando il nocache parametro

    http://www.example.com/app.css?nocache=true

    • Credo che questo potrebbe essere l’uso di attacco e di consumare la larghezza di banda nel tuo sito web.
  16. 1

    Sul mio server, il nginx cartella della cache è a /data/nginx/cache/

    Così l’ho tolto solo: sudo rm -rf /data/nginx/cache/

    Spero che questo vi aiuterà nessuno.

  17. 0

    È possibile aggiungere configurazione di nginx.conf come segue.

    ...
    http {
    proxy_cache_path  /tmp/nginx_cache levels=1:2 keys_zone=my-test-cache:8m max_size=5000m inactive=300m;
    
    server {
        proxy_set_header X- Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_cache my-test-cache;
        proxy_cache_valid  200 302  1m;
        proxy_cache_valid  404      60m;
        proxy_cache_use_stale   error timeout invalid_header updating;
        proxy_redirect off;
    
        ....
    }
    ...
    }
    

    Dall’alto, una cartella denominata “nginx_cache” è dynamicly creato in /tmp/per memorizzare il contenuto della cache.

    • La risposta giusta.
  18. 0

    C’è un metodo giusto per togliere solo la cache dei file, che corrisponde a un TASTO qualsiasi. Per esempio:

    grep -lr 'KEY: yahoo' /var/lib/nginx/cache | xargs rm -rf
    

    Questo elimina cache e file che corrisponde al TASTO “finanza/*”, se in nginx.conf è stato fissato:

    proxy_cache_key $host$uri;
    
  19. 0

    Stavo vivendo una sorta di problema simile:

    Installazione del sistema e Problema:
    (Su virtualbox sto web hosting con ubuntu e nginx – PHP pagina web si aggiorna non riflettere le modifiche apportate al file css esterno). Sto sviluppando sito web su una macchina windows e il trasferimento di file di nginx tramite cartella condivisa. Sembra nginx non scegliere le modifiche apportate al file css (rinfrescante in qualsiasi modo non aiuta. La modifica di un file css nome è unica cosa che ha funzionato)

    Soluzione:
    VM di trovare file condiviso (css file, nel mio caso). Aprire con nano e confrontare file in condivisione windows (che sono identici). VM di salvare file condiviso con il nano. Tutte le modifiche sono ora riflette nel browser. Non so perché questo funziona, ma lo ha fatto nel mio caso.

    AGGIORNAMENTO: Dopo aver riavviato il server VM il problema restituiti. Seguendo le istruzioni sotto Soluzione css responsive per gli aggiornamenti di nuovo

  20. 0

    Nel mio caso è stata attivata opcache in /etc/php/7.2/fpm/php.ini (Ubuntu):

    opcache.enable=1
    

    Impostando a 0 realizzato il server di carico la versione più recente di (php)file.

Lascia un commento