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




9 Answers

También puede omitir / re-caché en un archivo por archivo usando

proxy_cache_bypass $http_secret_header;

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

add_header X-Cache-Status $upstream_cache_status;

para caducar / actualizar el archivo en caché, use curl o cualquier cliente de resto para realizar una solicitud a la página 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 el caché.

caching nginx

Utilizo nginx como servidor frontal, he modificado los archivos CSS, pero nginx todavía está sirviendo a los antiguos.

He intentado reiniciar nginx, sin éxito y he buscado en Google, pero no he encontrado una forma válida de borrarlo.

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

¿Qué debería hacer ahora?




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 borre solo un archivo para nginx actualizarlos.




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 de acceso a su instalación nginx y puede encontrar el directorio de caché, el mismo puede funcionar para usted. Tenga mucho cuidado con el comando rm -rf , si está en el directorio incorrecto, puede eliminar todo el disco duro.




Ejecuto una secuencia de comandos bash muy simple que toma todos los 10 segundos para hacer el trabajo y me envía un correo cuando termino.

#!/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



Tenga en cuenta que proxy_cache_bypass puede darle un gran daño si su aplicación no devuelve una respuesta en caché para esa solicitud específica en la que la activa.

Si, por ejemplo, su aplicación envía una cookie con cada primera solicitud, entonces un script que active proxy_pass_bypass a través de curl probablemente obtendrá esa cookie en la respuesta, y nginx no usará esa respuesta para actualizar el elemento almacenado en caché.




Para aquellos que han intentado eliminar los archivos de caché nginx, y no ha funcionado o ha funcionado de forma intermitente, eche un vistazo a su configuración de open_file_cache. Si esto está habilitado y configurado para almacenar en caché un descriptor de archivo durante mucho tiempo, es posible que Nginx aún vea una versión del archivo en caché, incluso después de haberlo eliminado del disco. Tuve que reducir open_file_cache_valid a 1s (no estoy seguro si esto es esencialmente lo mismo que deshabilitar completamente el caché de archivos).




Tenemos un caché nginx (gigabytes) muy grande que ocasionalmente necesitamos limpiar. He desarrollado un script que borra instantáneamente 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 de disco.

En resumen:

  1. Mueva la carpeta de caché a una nueva ubicación (¡en el mismo sistema de archivos!) (Esto no interrumpe los descriptores de archivos abiertos)
  2. Vuelva a crear la carpeta de caché original, vacía
  3. Recargar Nginx (recarga elegante , donde nginx permite que los antiguos trabajadores terminen las solicitudes en curso)
  4. Eliminar datos antiguos 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;
    }
}



En mi servidor, la carpeta de caché nginx 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.




Estaba experimentando una especie de problema similar:

Configuración del sistema y problema: (en un virtualbox estoy alojando un sitio web utilizando ubuntu y nginx - las actualizaciones de la página web de PHP no reflejaban los cambios en el archivo css externo). Estoy desarrollando un sitio web en Windows Machine y transfiriendo archivos a nginx a través de una carpeta compartida. Parece que nginx no recoge los cambios en el archivo css (la actualización de cualquier manera no ayuda. Cambiar el nombre del archivo css es solo lo que funcionó)

Solución: En la VM, busque el archivo compartido (archivo css en mi caso). Abra con nano y compárelo con el archivo en Windows Share (parecen idénticos). En VM guardar archivo compartido con nano. Todos los cambios ahora se reflejan en el navegador. No estoy seguro de por qué funciona esto pero lo hizo en mi caso.

ACTUALIZACIÓN: Después de reiniciar el servidor VM, el problema regresó. Siguiendo las instrucciones en Solución, el css respondió a las actualizaciones nuevamente.




Related