禁用JavaScript文件的nginxcaching

好的,我几乎放弃了这个,但是我怎样才能禁用Nginx的JavaScript文件caching? 我正在使用Nginx的docker容器。 当我现在改变JavaScript文件中的东西时,我需要多次重新加载,直到新文件在那里。

我怎么知道它是Nginx,而不是浏览器/docker?

浏览器:我在命令行中使用了curl来模拟请求并且有相同的问题。 另外,我正在使用一个CacheKiller插件,并在Chrome开发工具中禁用caching。

Docker:当我连接到容器的bash,并在更改文件后使用cat ,我立即得到正确的结果。

我改变了我的nginx.confsites-enabled这(我发现在另一个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; } 

然而,在重build容器(并确保它在与cat的容器中)之后,它仍然不起作用。 这里是完整的.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; } 

我有以下nginx虚拟主机(静态内容)为本地开发工作禁用所有浏览器缓存:

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

没有发送缓存标题:

 $ 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始终是当前时间。

add_headeradd_header指令对NGINX缓存文件没有影响,那纯粹是关于浏览器看到的。

你可能想要的是:

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

虽然通常.js等是你要缓存的东西,所以也许你应该完全禁用缓存?

你正在寻找的是一个简单的指令,如:

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

以上将不缓存()中的扩展。 您可以为不同的文件类型配置不同的指令。