Nginx 的缓存清除和包含文件

Nginx 的缓存清除和包含文件

在 Apache 中,您可以使用以下命令缓存 css 和 js 文件,并使用 Apache 的 Include mod 将它们作为单个文件提供:

<FilesMatch "\.combined\.js$">
  Options +Includes
  AddOutputFilterByType INCLUDES application/javascript application/json
  SetOutputFilter INCLUDES
</FilesMatch>
<FilesMatch "\.combined\.css$">
  Options +Includes
  AddOutputFilterByType INCLUDES text/css
  SetOutputFilter INCLUDES
</FilesMatch>
<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
</IfModule>

我知道使用 nginx 可以实现这一点,但我似乎无法获得正确的语法。

-- 编辑 -- 添加一些代码

到目前为止我唯一拥有的是:

location ~* (.+)\.(?:\d+)\.(js|css)$ {
    ssi on;
    try_files $uri $1.$2;
}

我正在寻找能够使用combined带有数字的关键字将所有 js 和 css 文件合并为单个文件以进行缓存清除:

style.combined.100.css
javascript.combined.100.js

- 解决方案 -

location / {

    ssi on;
    ssi_types *;

    location ~* \.combined\.js$ {
        ssi_types application/javascript application/json;
    }

    location ~* \.combined\.css$ {
        ssi_types text/css;
    }

    location ~* ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ {
        try_files $uri $1.$3 =404;
    }
}

不确定是否安全ssi_types *;...

答案1

我对ssi 模块,但您可以尝试以下步骤(或多或少直接重写 Apache 配置)。

location / {

    location ~* \.combined\.js$ {
        ssi on;
        ssi_types application/javascript application/json;
    }

    location ~* \.combined\.css$ {
        ssi on;
        ssi_types text/css;
    }

    location ~* ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ {
        try_files $uri $1.$3 =404;
    }

}

相关内容