这个问题只是关于nginx的缓存,而不是关于缓存头和浏览器缓存。
我正在运行一个应用程序,该应用程序在表单的 URL 上显示项目的详细信息
http://my-server/details/<id>/
其中id是项目的唯一标识符。虽然生成的 HTML 页面是自动生成的并且对于该项目来说是唯一的,但该页面相对包含其他 JavaScript 和 CSS 文件。这些文件是静态的,不依赖于项目 ID。应用程序非常慢,我希望 nginx 缓存所有可能的内容。
nginx 充当反向代理。是否可以设置proxy_cache_key仅对文件名的所有 .js 和 .css 子请求的属性(省略 url 中的 id)?
示例:访问 http://my-server.tld/details/abc/style.css 首先, http://my-server.tld/details/def/style.css 之后应该会导致缓存命中。但访问 http://my-server.tld/details/abc/ 和 http://my-server/details/def/ 之后不应该(生成的 HTML 取决于 id)。
这就是我认为的基本配置
server {
listen 80;
server_name my-server.tld;
location / {
# root, doesn't matter
}
location /details {
# request to non-asset, cache as usual
}
location ~ ^/details/[a-z0-9]+/[a-z0-9]+\.(js|css)$ {
# request to static asset, use filename only as cache key
}
}
最佳答案
是的,您可以定义一个缓存键。这是一个例子:
server {
listen 80;
server_name my-server.tld;
location / {
# root, doesn't matter
}
location /details {
# request to non-asset, cache as usual
}
location ~ ^/details/[a-z0-9]+/(?<cache_filename>[a-z0-9]+\.(js|css))$ {
proxy_cache_key "/details/$cache_filename";
# Other configurations
# <...>
}
}
关于caching - 让 nginx 仅根据文件名(而不是完整路径)缓存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39294409/