force disable cache javascript caching nginx

disable - Deshabilitar la memoria caché nginx para archivos JavaScript



nginx force refresh cache (5)

Ok, casi estoy renunciando a esto, pero ¿cómo puedo desactivar el almacenamiento en caché de Nginx para archivos JavaScript? Estoy usando un contenedor docker con Nginx. Cuando ahora cambio algo en el archivo JavaScript, necesito varias recargas hasta que el nuevo archivo esté allí.

¿Cómo sé que es Nginx y no el navegador / docker?

Navegador: usé curl en la línea de comandos para simular la solicitud y tuve los mismos problemas. Además, estoy usando un complemento de CacheKiller y tengo la memoria caché deshabilitada en Chrome Dev Tools.

Docker: cuando me conecto al bash del contenedor y uso cat después de cambiar el archivo, obtengo el resultado correcto de inmediato.

Cambié mi nginx.conf para los sites-enabled para esto (que encontré en otro hilo de stackoverflow)

location ~* ^.+/.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|xml|html|htm)$ { # clear all access_log directives for the current level access_log off; add_header Cache-Control no-cache; # set the Expires header to 31 December 2037 23:59:59 GMT, and the Cache-Control max-age to 10 years expires 1s; }

Sin embargo, después de reconstruir los contenedores (y asegurarse de que está en el contenedor con cat ), todavía no funcionó. Esto aquí es el completo .conf

server { server_name app; root /var/www/app/web; # Redirect to blog location ~* ^/blog { proxy_set_header Accept-Encoding ""; sub_filter ''https://testproject.wordpress.com/'' ''/blog/''; sub_filter_once off; rewrite ^/blog/(.*) /$1 break; rewrite ^/blog / break; proxy_pass https://testproject.wordpress.com; } # Serve index.html only for exact root URL location / { try_files $uri /app_dev.php$is_args$args; } location ~ ^/(app|app_dev|config)/.php(/|$) { fastcgi_pass php-upstream; fastcgi_split_path_info ^(.+/.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS off; # Prevents URIs that include the front controller. This will 404: # http://domain.tld/app_dev.php/some-path # Remove the internal directive to allow URIs like this internal; } location ~* ^.+/.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|xml|html|htm)$ { # clear all access_log directives for the current level access_log off; add_header Cache-Control no-cache; # set the Expires header to 31 December 2037 23:59:59 GMT, and the Cache-Control max-age to 10 years expires 1s; } error_log /var/log/nginx/app_error.log; access_log /var/log/nginx/app_access.log; }


Las directivas expires y add_header no tienen ningún impacto en que NGINX almacene en caché los archivos, solo se trata de lo que ve el navegador.

Lo que probablemente quieras en su lugar es:

location stuffyoudontwanttocache { # don''t cache it proxy_no_cache 1; # even if cached, don''t try to use it proxy_cache_bypass 1; }

Aunque, por lo general, .js, etc., es lo que se almacenaría en la memoria caché, ¿quizás debería simplemente deshabilitar el almacenamiento en caché por completo?


Lo que estás buscando es una directiva simple como:

location ~* /.(?:manifest|appcache|html?|xml|json)$ { expires -1; }

Lo anterior no almacenará en caché las extensiones dentro de (). Puede configurar diferentes directivas para diferentes tipos de archivos.


Recuerde sendfile off; o los encabezados de caché no funcionan. Yo uso este recortado

location / { index index.php index.html index.htm; try_files $uri $uri/ =404; #.s. el /index.html para html5Mode de angular #.s. kill cache. use in dev sendfile off; add_header Last-Modified $date_gmt; add_header Cache-Control ''no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0''; if_modified_since off; expires off; etag off; proxy_no_cache 1; proxy_cache_bypass 1; }


Tengo el siguiente host virtual Nginx (contenido estático) para el trabajo de desarrollo local para deshabilitar todo el almacenamiento en caché del navegador:

upstream testCom { server localhost:1338; } server { listen 80; server_name <your ip or domain>; location / { # proxy_cache datacache; proxy_cache_key $scheme$host$request_method$request_uri; proxy_cache_valid 200 60m; proxy_cache_min_uses 1; proxy_cache_use_stale updating; proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme; proxy_ignore_headers Set-Cookie; userid on; userid_name __uid; userid_domain <your ip or domain>; userid_path /; userid_expires max; userid_p3p ''policyref="/w3c/p3p.xml", CP="CUR ADM OUR NOR STA NID"''; add_header Last-Modified $date_gmt; add_header Cache-Control ''no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0''; if_modified_since off; expires off; etag off; proxy_pass http://testCom; } }


Tengo el siguiente host virtual nginx (contenido estático) para el trabajo de desarrollo local para deshabilitar todo el almacenamiento en caché del navegador:

server { listen 8080; server_name localhost; location / { root /your/site/public; index index.html; # kill cache add_header Last-Modified $date_gmt; add_header Cache-Control ''no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0''; if_modified_since off; expires off; etag off; } }

No se han enviado encabezados de caché:

$ curl -I http://localhost:8080 HTTP/1.1 200 OK Server: nginx/1.12.1 Date: Mon, 24 Jul 2017 16:19:30 GMT Content-Type: text/html Content-Length: 2076 Connection: keep-alive Last-Modified: Monday, 24-Jul-2017 16:19:30 GMT Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0 Accept-Ranges: bytes

Last-Modified es siempre la hora actual.