让nginxcaching文件只取决于文件名(而不是完整path)

这个问题只是关于cachingnginx,而不是caching头和浏览器caching。

我正在运行一个应用程序,显示表单的URL上的项目的详细信息

http://my-server/details/<id>/ 

其中id是项目的唯一标识符。 虽然生成的HTML页面是自动生成的,并且对项目来说是唯一的,但该页面相对包含其他JavaScript和CSS文件。 这些文件是静态的, 依赖于项目ID。 应用程序非常慢,我希望nginxcaching任何可能的。

nginx充当反向代理。 是否有可能将所有.js和.css子请求的proxy_cache_key属性设置为只有文件名(省略了url中的id)?

例如: 之后首先访问http://my-server.tld/details/abc/style.css ,之后访问http://my-server.tld/details/def/style.css应该导致caching命中。 但是之后访问http://my-server.tld/details/abc/http:// my-server / details / def /不应该(生成的HTML取决于id)。

这就是我所想的基本configuration

 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 # <...> } }