![如何有条件地在 nginx 中为通过 X-Accel-Redirect 提供的字体添加 Access-Control-Allow-Origin 标头](https://linux22.com/image/625636/%E5%A6%82%E4%BD%95%E6%9C%89%E6%9D%A1%E4%BB%B6%E5%9C%B0%E5%9C%A8%20nginx%20%E4%B8%AD%E4%B8%BA%E9%80%9A%E8%BF%87%20X-Accel-Redirect%20%E6%8F%90%E4%BE%9B%E7%9A%84%E5%AD%97%E4%BD%93%E6%B7%BB%E5%8A%A0%20Access-Control-Allow-Origin%20%E6%A0%87%E5%A4%B4.png)
我正在尝试通过 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;
}