CSS 和 JS 文件未更新,据称是因为 Nginx 缓存

CSS 和 JS 文件未更新,据称是因为 Nginx 缓存

我的 Web 应用程序与 AppCache 配合使用,我希望当我修改 html/css/js 文件,然后更新缓存清单时,当用户访问我的 Web 应用程序时,他们将获得这些文件的更新版本。如果我更改 HTML 文件,它可以完美运行,但当我更改 CSS 和 JS 文件时,仍会使用旧版本。

我已经检查了所有内容,我认为这与我的 nginx 配置有关。我有一个包含以下内容的 cache.conf 文件:

gzip on;
gzip_types text/css application/x-javascript text/x-component text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location ~ \.(css|js|htc)$ {
expires 31536000s;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate";
}
location ~ \.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml)$ {
expires 3600s;
add_header Pragma "public";
add_header Cache-Control "max-age=3600, public, must-revalidate, proxy-revalidate";
}

在 default.conf 中我有我的位置。我想让这个缓存在除一个位置之外的所有位置上工作,我该如何配置它?我尝试了以下方法,但没有用:

location /dir1/dir2/ {
  root /var/www/dir1;
  add_header Pragma "no-cache";
  add_header Cache-Control "private";
  expires off;
}

谢谢

更新:

我的 cache.conf 现在看起来像这样:

location ^~ /desk/ {
  add_header Pragma "no-cache";
  add_header Cache-Control "private";
  expires off;
}

location ^~ /dev/desk/ {
  add_header Pragma "no-cache";
  add_header Cache-Control "private";
  expires off;
}

gzip on;
gzip_types text/css application/x-javascript text/x-component text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location ~ \.(css|js|htc)$ {
expires 31536000s;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate";
}

答案1

nginx 中的 location 定义独占配置,即有两个 location

location /dir1/dir2/ {
    # configuration A
}

location ~ \.(css|js|htc)$ {
    # configuration B
}

一个请求只能使用一个配置。使用上述位置(如您的配置中所示),请求将根据以下条件/dir1/dir2/file.css进行选择location ~ \.(css|js|htc)$位置选择规则

如果您希望 nginx 在请求以 开头时不搜索正则表达式给出的位置/dir1/dir2/,请使用^~修饰符:

location ^~ /dir1/dir2/ {
    # configuration A
}

location ~ \.(css|js|htc)$ {
    # configuration B
}

这样,该location ^~ /dir1/dir2/位置将用于/dir1/dir2/file.css请求。

或者,您可以将正则表达式位置隔离在另一个前缀位置下,例如location /,如下所示:

location / {
    # configuration for normal files under /

    location ~ \.(css|js|htc)$ {
        # configuration for css/js/htc files under /
    }
}

location /dir1/dir2/ {
    # configuration for all files under /dir1/dir2/
}

http://nginx.org/r/location了解详细信息。nginx 如何处理请求这篇文章可能也会有帮助。

相关内容