नग्नेक्स, एक्स-एक्सिल-रीडायरेक्ट और माइम प्रकार


9

अपने nginx 0.8.34 सेटअप में मैं एप्लिकेशन कोड में फ़ाइल डाउनलोड को नियंत्रित करने के लिए एक्स-एक्सेल-रीडायरेक्ट सुविधा का उपयोग कर रहा हूं, जबकि एप्लिकेशन स्वयं डाउनलोड को हैंडल नहीं कर रहा है।

बहुत दर्द के बाद यह अब मूल रूप से काम करता है सिवाय nginx हमेशा फ़ाइल को text/htmlसामग्री प्रकार के साथ लौटाता है ।

डिफ़ॉल्ट सामग्री प्रकार httpब्लॉक में निर्दिष्ट एप्लिकेशन / ऑक्टेट-स्ट्रीम है ।

सर्वर ब्लॉक में अन्य चीजों के अलावा, निर्देशिका की परिभाषा है जहां फाइलें संग्रहीत की जाती हैं:

location /files {
  default_type  application/octet-stream;
  alias /srv/www/uploads;
  internal;  
}

इसलिए मैंने यहां भी सामग्री प्रकार निर्दिष्ट किया लेकिन कुछ भी नहीं बदला है।

मैं एप्लिकेशन द्वारा सामग्री-प्रकार सेट नहीं करना चाहता, क्योंकि तब मैं मुझे धीमा कर दूंगा (मुझे पहले इसे निर्धारित करना होगा)। तो आदर्श रूप से nginx फ़ाइल एक्सटेंशन के आधार पर सही mimetype लौटाएगा (मैं httpब्लॉक में mime.types शामिल करता हूं )।

जवाबों:


12

यदि आप nginx को सही माइम प्रकार का अनुमान लगाने देना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि आपके बैकएंड सर्वर से कोई सामग्री-प्रकार वापस न किया जाए।

With django:
    response = HttpResponse()
    response['Content-Type'] = ''
    response['X-Accel-Redirect'] ='/my/file.jpg'
    return response

1
tornado के साथ: tornado.web.RequestHandler.clear (self) self.set_header ('X-Accel-Redirect', redirect_location) self.clear_header ('सामग्री-प्रकार') .clear विधि पाठ / html के लिए सामग्री-प्रकार सेट करता है।
एंथनी

1

मैं व्यक्तिगत रूप से आवेदन में केवल आवेदन / ऑक्टेट-स्ट्रीम सेट करता हूं, लेकिन आप नग्नेक्स को बैक-एंड आपूर्ति हेडर का उपयोग करने से रोकने के लिए fastcgi_ignore_headers का उपयोग करने में सक्षम हो सकते हैं ।

fastcgi_ignore_headers Content-Type;

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

क्या आपने यह कोशिश की या आप यह मान रहे हैं कि यह काम नहीं करेगा? बैक-एंड सप्लाई हेडर को अनदेखा करके इसे फ़ाइल के आधार पर निर्धारित करने का प्रयास करना चाहिए।
मार्टिन फेजर्डवाल्ड

2
कोई अनदेखी नहीं कर सकता Content-Type। के अनुसार wiki.nginx.org/HttpFcgiModule#fastcgi_ignore_headers संभावित मान हैं X-Accel-Redirect, X-Accel-Expires, ExpiresयाCache-Control
jnns

1
"हेडर को निर्दिष्ट करना संभव है" जैसे कि शाइटी रिटास्टिंग का मतलब "संभावित मान हैं" नहीं है। मैंने एक्स-एक्सीलेंस-रीडायरेक्ट के साथ संयोजन से पहले कंटेंट-टाइप को नजरअंदाज कर दिया है, इसलिए मुझे नहीं लगता कि यह असंभव है, हालांकि, मैं मानता हूं कि मैं गंभीर विवरण के साथ अंतरंग नहीं हूं।
मार्टिन फॉर्डोर्वाल्ड 15

@MartinFjordvald, यह कोशिश की और nginx शिकायत शुरू करने से इनकार कर दिया nginx: [warn] invalid value "Content-Type" in /etc/nginx/conf.d/default.conf:27लेकिन fastcgi_ignore_headers "Expires"काम करता है
dnozay

0

php-fpm के साथ:

<?php
    header("Content-Type: ");
    header("X-accel-redirect: (...)");

बताता है कि सामग्री प्रकार हेडर को बिल्कुल भी नहीं भेजना है (एक खाली भी नहीं), और nginx आपके लिए टाइप का अनुमान लगाएगा और हेडर जोड़ेगा :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.