proxy_redirect proxy_cache_lock_timeout plus leverage files example cache caching nginx

caching - proxy_cache_lock_timeout - nginx proxy_redirect example



¿Cómo borrar el caché de nginx? (19)

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?


A menos que haya configurado una zona de caché a través de proxy_cache_path y luego la haya utilizado (por ejemplo, en un bloque de ubicación), a través de: proxy_cache, no se almacenará en caché.

Sin embargo, si lo hizo, de acuerdo con el autor de nginx , basta con eliminar todos los archivos del directorio de caché.

Forma más sencilla: find /path/to/your/cache -type f -delete


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" [email protected] 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 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.


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.


Encontré esto útil

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

Busca, y si lo encuentras borra.


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.


Hay dos respuestas en esta pregunta.

  • Uno para nginx como caché inversa
  • Otro para limpiar el caché del navegador por entrada de encabezado (este)

Utilizar:

expires modified +90d;

P.EJ:

location ~* ^.+/.(css|js|jpg|gif|png|txt|ico|swf|xml)$ { access_log off; root /path/to/htdocs; expires modified +90d; }


Hay un método correcto para eliminar solo los archivos de caché, que coinciden con cualquier CLAVE. Por ejemplo:

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

Esto elimina todos los archivos de caché, que coinciden con la CLAVE "yahoo / *", si se estableció en nginx.conf:

proxy_cache_key $host$uri;


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).


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


Puede agregar la configuración en nginx.conf como la siguiente.

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

Desde arriba, una carpeta llamada "nginx_cache" se crea dinámicamente en / tmp / para almacenar contenido almacenado en caché.


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.


Si desea borrar el caché de archivos específicos, puede usar la directiva proxy_cache_bypass . Así es como lo haces.

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

Ahora, si desea omitir la memoria caché, acceda al archivo pasando el parámetro nocache

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


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é.


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


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é.


Tuve exactamente el mismo problema: estaba ejecutando mi nginx en Virtualbox. No tenía el caché activado. Pero parece que sendfile se nginx.conf en nginx.conf y eso estaba causando el problema. @kolbyjack lo mencionó arriba en los comentarios.

Cuando sendfile el sendfile de sendfile , funcionó bien.

Esto es porque:

Sendfile se usa para "copiar datos entre un descriptor de archivo y otro" y aparentemente tiene algunos problemas reales cuando se ejecuta en un entorno de máquina virtual, o al menos cuando se ejecuta a través de Virtualbox. Desactivar esta configuración en nginx hace que el archivo estático se sirva a través de un método diferente y sus cambios se reflejarán de inmediato y sin preguntas


Yo también tuve este problema.

  • No se pudo encontrar ninguna carpeta nginx / cache
  • el archivo de envío estaba apagado

Mi dominio usa cloudflare.com para DNS (¡excelente servicio!). Jajaja Allí estaba:

cloudflare.com -> caching -> Purge Cache (Purgué todo) ¡Eso resolvió mi problema!


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.