[caching] ¿Cómo borrar el caché de nginx?



Answers

También puede omitir / volver a almacenar en caché archivo por archivo utilizando

proxy_cache_bypass $http_secret_header;

y como bonificación puede devolver este encabezado para ver si lo obtuvo de la caché (devolverá 'HIT') o del servidor de contenido (devolverá 'BYPASS').

add_header X-Cache-Status $upstream_cache_status;

para caducar / actualizar el archivo almacenado en caché, usar curl o cualquier cliente de reposo para realizar una solicitud a la página almacenada en caché.

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

esto devolverá una copia nueva del artículo y también reemplazará lo que está en la memoria caché.

Question

Utilizo nginx como el servidor frontal, he modificado los archivos CSS, pero nginx sigue sirviendo a los antiguos.

Intenté reiniciar nginx, no tuve éxito y busqué en Google, pero no encontré una forma válida de borrarlo.

Algunos artículos dicen que podemos simplemente eliminar el directorio de caché: var/cache/nginx , pero no hay tal directorio en mi servidor.

¿Qué debería hacer ahora?




Ejecuto un script bash muy simple que toma todos los 10 segundos para hacer el trabajo y me envía un correo cuando termina.

#!/bin/bash
sudo service nginx stop
sudo rm -rf /var/cache/nginx/*
sudo service nginx start | mail -s "Nginx Purged" me@gmail.com
exit 0



En mi instalación de nginx, encontré que tenía que ir a:

/opt/nginx/cache

y

sudo rm -rf *

en ese directorio Si conoce la ruta a su instalación de nginx y puede encontrar el directorio de caché, lo mismo puede funcionar para usted. Tenga mucho cuidado con el comando rm -rf , si se encuentra en el directorio incorrecto, puede eliminar todo el disco duro.




find /etc/nginx/cache_folder -type d -exec rm -rvf {} \;
mkdir /etc/nginx/cache_folder
service nginx restart

Tenga cuidado de especificar correctamente la ruta correcta.




Para aquellos que otras soluciones no funcionan, verifique si está usando un servicio DNS como CloudFlare . En ese caso, active el "Modo de desarrollo" o use la herramienta "Purgar caché".




En mi servidor, la carpeta nginx cache está en /data/nginx/cache/

Así que lo sudo rm -rf /data/nginx/cache/ solo: sudo rm -rf /data/nginx/cache/

Espero que esto ayude a cualquiera.




Tenemos una gran caché de nginx (gigabytes) que ocasionalmente necesitamos limpiar. He elaborado una secuencia de comandos que borra al instante la memoria caché (en lo que respecta a Nginx) y luego elimina el directorio de la memoria caché sin privar a la aplicación principal de E / S del disco.

En resumen:

  1. Mueva la carpeta de caché a una nueva ubicación (¡en el mismo sistema de archivos!) (Esto no interrumpe ningún descriptor de archivo abierto)
  2. Recrea la carpeta de caché original, vacía
  3. Recargar Nginx (recarga graciosa , donde nginx permite que los trabajadores mayores finalicen las solicitudes en progreso)
  4. Eliminar datos viejos en caché

Aquí está el script, adaptado a Ubuntu 16.04 LTS, con el caché ubicado en /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

Y en caso de que sea útil, aquí está la configuración de Nginx que usamos:

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;
    }
}



Puede eliminar el directorio de caché de nginx o puede buscar un archivo específico:

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

Y elimine solo un archivo para actualizarlos a nginx.




Estaba experimentando un tipo de problema similar:

Configuración y problema del sistema: (En una virtualbox, soy un alojamiento web que usa ubuntu y nginx; las actualizaciones de la página web PHP no reflejan los cambios al archivo css externo). Estoy desarrollando un sitio web en Windows Machine y transfiero archivos a nginx a través de una carpeta compartida. Parece que nginx no capta los cambios en el archivo css (refrescar de cualquier forma no ayuda. Cambiar el nombre del archivo css es lo único que funcionó)

Solución: en VM, encuentre el archivo compartido (archivo css en mi caso). Abra con nano y compare con el archivo en Windows compartido (parecen idénticos). En VM, guarde el archivo compartido con nano. Todos los cambios ahora se reflejan en el navegador. No estoy seguro de por qué funciona, pero lo hizo en mi caso.

ACTUALIZACIÓN: después de reiniciar el servidor de VM, el problema volvió. Siguiendo las instrucciones de Solución, el css responde a las actualizaciones nuevamente




Links