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이 필요하다는 것입니다. 이 답변 을 googled 하고 내 서버 지시문에 추가했습니다.

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

하지만 이제 내 글꼴이 전혀 제공되지 않습니다.

대신 error.log로컬 파일 시스템에서 열려고한다고보고합니다.

2010/10/02 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 개의 다른 위치에 봉사하고 있다는 것입니다. 그리고 그 대신에 메인 내부에서 정규식 검사를 수행 한 다음 헤더를 공급해야합니다.



답변

우와! 내 편집에서 생각했던 것과 거의 비슷했습니다. 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;
}