ฉันจะสร้าง nginx support @ รูปแบบฟอนต์ใบหน้าและอนุญาตให้ access-control-allow-origin ได้อย่างไร


21

ฉันได้เพิ่มกฎเหล่านี้ไปที่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, se rver: static.arounds.org คำขอ: "HEAD /fonts/mgopenmodernabold-webfont.woff HTTP / 1.1", โฮสต์: "static.arounds.org"

มีความคิดเห็นอะไรที่อาจปิดด้วยไวยากรณ์ได้บ้าง ฉันต้องเพิ่มกฎอย่างชัดเจนหรือไม่ว่าอย่าพยายามเปิดในเครื่องหรืออะไร

แก้ไข : ฉันคิดว่าปัญหาคือตอนนี้ฉันให้บริการ 2 สถานที่ต่างกัน และแทนที่จะเป็นสิ่งที่ฉันควรจะตรวจสอบ regex ภายในหนึ่งหลักแล้วฟีดส่วนหัว


นอกจากนี้คุณยังสามารถเพิ่ม "otf" ในกฎของคุณได้
Kevin Campion

คำตอบ:


18

Woot! เข้าใจแล้ว .. มันเป็นสิ่งที่ฉันสงสัยมากในการแก้ไขของฉันฉันต้องทำการตรวจสอบชื่อไฟล์ regex ในพื้นรองเท้าของฉัน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 *;
            }
    }

8
ไม่คุณทำไม่ได้จริงๆ คุณเพียงแค่ต้องเรียนรู้เกี่ยวกับการสืบทอดบริบท หากคุณระบุคำสั่งรูทไซต์ในบล็อกเซิร์ฟเวอร์ของคุณจะมีอยู่ในบล็อคตำแหน่งทั้งหมด ฉันขอแนะนำให้คุณอ่านนี้: blog.martinfjordvald.com/2010/07/nginx-primer
Martin Fjordvald

มีคนพูดถึงฉันในช่อง #nginx แต่ฉันลืมปรับปรุงคำตอบ
meder omuraliev

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

3
หมายเหตุ:หากการแก้ปัญหาที่ได้รับไม่ได้ทำงานให้คุณอ่านนี้และนี้ มันเป็นความสว่างและคุณอาจพบเหตุผลที่มันไม่ทำงาน
its_me

สิ่งนี้ไม่ได้ผลสำหรับฉันเนื่องจาก url แบบอักษรมีสตริงข้อความค้นหา
Broncha

เหมาะกับฉัน ...
Manan Shah

คำแนะนำ:ถ้าคุณ cloudflare ล้างพวกมัน !!
shakee93

5

สินทรัพย์ทั้งหมด

สิ่งนี้จะทำให้สินทรัพย์ทั้งหมดทำงานได้ดี คุณสามารถเพิ่ม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";
}

1
ใช่นี่ทำลายทุกอย่าง
AlxVallejo

3

โซลูชันอื่น: ใส่แบบอักษรทั้งหมดของคุณในตัวอย่างstatic/fontsและเพิ่ม

location /static/fonts  {
    add_header "Access-Control-Allow-Origin" *;
    alias /var/www/mysite/static/fonts;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.