我的 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 如何处理请求这篇文章可能也会有帮助。