मैं nginx का समर्थन @ फ़ॉन्ट-फ़ॉरमेट कैसे कर सकता हूं और एक्सेस-कंट्रोल-अनुमति-मूल की अनुमति दे सकता हूं?


21

मैंने ये नियम जोड़े हैं mime.types:

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

अब कंटेंट-टाइप हेडर को उनमें से प्रत्येक के अनुसार ठीक से सेट किया जा रहा है। मेरा एकमात्र मुद्दा अब फ़ायरफ़ॉक्स को एक्सेस-कंट्रोल-अनुमति-उत्पत्ति की आवश्यकता है। मैंने इस उत्तर को टाल दिया है और इसे अपने सर्वर निर्देश में जोड़ दिया है:

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

लेकिन अब मेरे फोंट बिल्कुल नहीं परोसे जा रहे हैं।

इसके बजाय error.logरिपोर्टों कि यह उन्हें स्थानीय फाइल सिस्टम पर खोलने की कोशिश कर रहा है ..

2010/10/02 22:20:21 [त्रुटि] 1641 # 0: * 15 खुला () "/us/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_nounds.org"

किसी भी विचार क्या वाक्य रचना के साथ बंद हो सकता है? क्या मुझे स्पष्ट रूप से एक नियम जोड़ने की आवश्यकता है जो यह कहते हैं कि इसे स्थानीय रूप से खोलने की कोशिश न करें या क्या?

संपादित करें : मुझे लगता है कि समस्या यह है कि मैं अब 2 अलग-अलग स्थानों की सेवा कर रहा हूं। और इसके बजाय मैं regex जांच मुख्य एक के अंदर करना चाहिए फिर हेडर फ़ीड।


आप अपने नियम में "ओटीएफ" भी जोड़ सकते हैं
केविन कैंपियन

जवाबों:


18

यहाँ प्रारंभ करें समझ गया .. यह बहुत ज्यादा था जिसे मुझे अपने संपादन में संदेह था, मुझे मूल रूप से 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
मार्टिन फेजर्डवाल्ड

किसी ने वास्तव में #nginx चैनल में मेरे लिए उल्लेख किया है लेकिन मैं उत्तर को अद्यतन करना भूल गया।
मेड ऑमरुराइवल

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

3
नोट: यदि दिए गए समाधान आपके लिए काम नहीं करते हैं, तो इसे और इसे पढ़ें । यह ज्ञानवर्धक है, और आपको यह काम नहीं करने का कारण मिल सकता है।
इसका_मेव

यह मेरे लिए काम नहीं करता है क्योंकि फॉन्ट यूआरएल में क्वेरी स्ट्रिंग
ब्रोंचा

मेरे लिए काम करता है ...
मनन शाह

संकेत: यदि आप उन्हें बादल छीलना चाहते हैं !!
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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.