NGINX:检查文件是否存在不触发启用不带模块的静态brotli

问题描述

我当前正在尝试使Nginx在请求的浏览器接受时用(预编译的)brotli文件响应。 (接受编码包含“ br”)。

文件的压缩版本位于同一文件夹中,但具有附加扩展名'.br'。

所以根据https://blog.keul.it/webperf-reduce-bundle-size-with-static-brotli-compression/,我当前的解决方案是:

set $extension "";
set $rewritten false;

if ($http_accept_encoding ~ br) {
  set $extension ".br";
}

if (-f $request_filename$extension) {
  set $rewritten true;
  rewrite (.*) $1$extension break;
}

location ~\/assets\/(.*\.js.br)$ {
  alias /var/app/current/public/assets;

  gzip off;
  add_header Content-Type "application/javascript";
  add_header content-encoding br;
  add_header vary content-encoding;
}

location /assets {
  add_header Dbg-Extension $extension;
  add_header Dbg-Rewritten $rewritten;
  add_header Dbg-Filename $request_filename$extension;

  alias /var/app/current/public/assets;
  gzip_static on;
  gzip on;
  expires max;
  add_header Cache-Control public;
}

但是Nginx似乎从来没有将 if(-f ...)指令评估为true,因此每次都回落到第二个location指令。

添加了一些额外的调试头(不知道如何更好地调试它),并且 Dbg-Extension 显示了正确的扩展名(“ .br”), Dbg-Filename 显示brotli文件的正确路径(已通过复制/粘贴检查),但 Dbg-重写永远不会正确。

我不明白!有谁知道缺失了什么?

甚至是完全不同的方法来实现这一目标?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)