Назад | Перейти на главную страницу

Как я могу заставить nginx поддерживать форматы @ font-face и разрешить access-control-allow-origin?

Я добавил эти правила в 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. Я погуглил это ответ и добавил это в мою директиву сервера:

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

но теперь мои шрифты вообще не обслуживаются.

Вместо этого error.log сообщает, что пытается открыть их в локальной файловой системе ..

02.10.2010 22:20:21 [ошибка] 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»

Есть идеи, что может быть не так с синтаксисом? Мне нужно явно добавить правило, говорящее, что не пытайтесь открывать его локально или что?

РЕДАКТИРОВАТЬ: Думаю, проблема в том, что сейчас я обслуживаю 2 разных места. И вместо этого я должен выполнить проверку регулярного выражения внутри основного, а затем передать заголовок.

Woot! Понятно ... Это было в значительной степени то, что я подозревал в своем редактировании, мне пришлось в основном проверять имя файла регулярного выражения в своей единственной location {} вместо того, чтобы сделать альтернативный.

    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";
}

другое решение: поместите все свои шрифты, например, static/fonts, и добавить

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