caching - 让 nginx 仅根据文件名(而不是完整路径)缓存文件

标签 caching nginx

这个问题只是关于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/

相关文章:

ruby-on-rails - ubuntu 14.04 上 passenger-install-nginx-module 的 Bundler 错误

javascript - 如何将音频文件保存在浏览器的缓存中,以便当用户按下按钮时,音频会立即从缓存中开始播放?

java - 如何为@CachePut定义多个键?

javascript - 为什么 Google Chrome 9 不显示来自 Amazon S3 的图像?

debian 8.3 中 Nginx 安装错误

docker - vue-router 历史模式在刷新时不起作用

css - Symfony2,加载没有缓存的css文件

javascript - jQuery AutoComplete 依赖缓存问题

nginx - nginx 重载如何工作?为什么它是零停机时间

proxy - 使用 nginx 将请求重定向到 CDN