当前位置:首页 > 服务器技术 > nginx

缓存 – 让nginx缓存文件仅取决于文件名(而不是完整路径)

这个问题仅关于缓存nginx,而不是关于缓存头和浏览器缓存.

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

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

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

nginx充当反向代理.是否可以将所有.js和.css子请求的proxy_cache_key属性设置为仅文件名(从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
        # <...>
    }
}

【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!