如何有条件地在 nginx 中为通过 X-Accel-Redirect 提供的字体添加 Access-Control-Allow-Origin 标头

如何有条件地在 nginx 中为通过 X-Accel-Redirect 提供的字体添加 Access-Control-Allow-Origin 标头

我正在尝试通过 PHP 脚本提供一些 webfonts,该脚本告诉 nginx 使用 进行内部重定向X-Accel-Redirect

由于该脚本服务于多种类型的文件,我只希望添加Access-Control-Allow-Origin字体的标题。

这是我尝试过的有效配置:

location /deploys/ {
  internal;
  alias   /www/deploys/;
  expires 1y;

  add_header Access-Control-Allow-Origin *;
}

这种方法的问题是现在所有文件都包含Access-Control-Allow-Origin标题。我只希望我的字体有这个标题。

因此,我尝试了一个条件:

location /deploys/ {
  internal;
  alias   /www/deploys/;
  expires 1y;

  if ($request_filename ~* ^.?/([^/]?)$)
  {
     set $filename $1; 
  }

  if ($filename ~* ^.*?\.(eot)|(ttf)|(woff)$){
     add_header Access-Control-Allow-Origin *;
  }
}

不幸的是,这不起作用(我怀疑这可能是由于使用“X-Accel-Redirect”的内部重定向)。

如何Access-Control-Allow-Oirgin使用附加某些扩展的标题X-Accel-Redirect

答案1

看起来alias会更改请求文件。我没有时间编译和安装模块echo来验证,但使用以下配置解决了该问题:

location /deploys/ {
  internal;

  if ($request_filename ~* ^.?/([^/]?)$)
  {
     set $filename $1; 
  }

  if ($filename ~* ^.*?\.(eot)|(ttf)|(woff)$){
     add_header Access-Control-Allow-Origin *;
  }

  alias   /www/deploys/;
  expires 1y;
}

相关内容