我已经将这些规则添加到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; }