我怎样才能使nginx支持@ font-face格式并允许访问控制允许来源?

我已经将这些规则添加到mime.types

 application/x-font-ttf ttf; font/opentype otf; application/vnd.ms-fontobject eot; font/x-woff woff; 

现在,Content-Type头部被正确设置。 我现在唯一的问题是Firefox需要Access-Control-Allow-Origin。 我GOOGLE了这个答案,并将其添加到我的服务器指令:

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

但现在我的字体根本没有被服务。

相反, error.log报告它试图在本地文件系统上打开它们。

2010/10/02 22:20:21 [error] 1641#0:* 15 open()“/usr/local/nginx/html/fonts/mgopenmodernabold-webfont.woff”失败(2:没有这样的文件或目录) ,客户端:69.164.216.142,服务器:static.arounds.org,请求:“HEAD /fonts/mgopenmodernabold-webfont.woff HTTP / 1.1”,主机:“static.arounds.org”

任何想法可以用语法closures? 我是否需要明确添加规则,说不要试图在本地打开它或什么?

编辑 :我认为问题是我现在服务2个不同的位置。 而不是我应该做的主正面的正则expression式检查然后喂给头。

活泉! 知道了..这几乎是我的编辑怀疑,我不得不在我的唯一location {}做正则expression式文件名检查,而不是做一个替代。

  location / { root /www/site.org/public/; index index.html; if ($request_filename ~* ^.*?/([^/]*?)$) { set $filename $1; } if ($filename ~* ^.*?\.(eot)|(ttf)|(woff)$){ add_header Access-Control-Allow-Origin *; } } 
 location ~* \.(eot|ttf|woff)$ { add_header Access-Control-Allow-Origin *; } 

所有资产

这将使所有资产正常工作。 如果你想定义一个新的位置,你可以添加root

 location ~ \.(js|css|png|jpg|jpeg|gif|ico|html|woff|woff2|ttf|svg|eot|otf)$ { add_header "Access-Control-Allow-Origin" "*"; expires 1M; access_log off; add_header Cache-Control "public"; } 

另一个解决scheme:把所有的字体,例如, static/fonts ,并添加

 location /static/fonts { add_header "Access-Control-Allow-Origin" *; alias /var/www/mysite/static/fonts; }