nginx, x-accel-redirect ve mime türleri


9

Benim nginx 0.8.34 kurulumda ben uygulama kendini indirme işlemek zorunda değilken uygulama kodunda dosya indirme kontrol etmek için X-Accel-Redirect özelliğini kullanıyorum.

Çok acıdan sonra, nginx dışında her zaman dosyayı text/htmliçerik türüyle döndürmesi dışında bu temelde çalışır .

Varsayılan içerik türü, httpblokta belirtilen application / octet-stream şeklindedir .

Sunucu bloğu, diğer şeylerin yanı sıra, dosyaların depolandığı dizinin tanımını içerir:

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

Bu yüzden burada bile içerik türünü belirttim ama hiçbir şey değişmedi.

İçerik Tipi'ni uygulama tarafından ayarlamak istemiyorum çünkü o zaman beni yavaşlatırım (önce belirlemem gerekir). Bu nedenle ideal olarak nginx, dosya uzantısına bağlı olarak doğru mime türünü döndürür ( httpbloğa mime.types dahil ederim ).

Yanıtlar:


12

Nginx'in doğru mime türünü tahmin etmesine izin vermek istiyorsanız, arka uç sunucunuzdan hiçbir içerik türünün döndürülmediğinden emin olmanız gerekir.

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

1
tornado ile: .clear yöntemi olarak contentn tipini text / html olarak ayarlar.
Anthony

1

Ben şahsen sadece uygulamada uygulama / sekizli-akışı ayarlamak ama olabilir kullanabilmek için fastcgi_ignore_headers arka uç verilen başlık kullanmasını Nginx önlemek için.

fastcgi_ignore_headers Content-Type;

Cevabınız için teşekkür ederim. Görüntülerin görüntü olarak işlenmesi ve zip dosyalarının bir indirme seçeneği olarak sunulması için farklı içerik türlerini sunuculamak istiyorum. Yani maalesef bu tam olarak çözülmüyor.
Tomas Kohl

Denediniz mi, yoksa işe yaramayacağını mı düşünüyorsunuz? Arka uç verilen üstbilgiyi yok sayarak dosyaya göre belirlemeye çalışmalıdır.
Martin Fjordvald

2
Göz ardı edilemez Content-Type. Göre wiki.nginx.org/HttpFcgiModule#fastcgi_ignore_headers Olası değerler şunlardır X-Accel-Redirect, X-Accel-Expires, ExpiresveyaCache-Control
jnns

1
"Bok gibi ifadeler" olası değerler "anlamına gelmezken," gibi başlıklar belirtmek mümkündür. Daha önce x-accel-redirect ile birlikte Content-Type'ı görmezden geldim, bu yüzden imkansız olduğunu düşünmüyorum, ancak cesur ayrıntılarla samimi olmadığımı itiraf edeceğim.
Martin Fjordvald

@MartinFjordvald, denedi ve nginx şikayet etmeye başlamayı reddetti nginx: [warn] invalid value "Content-Type" in /etc/nginx/conf.d/default.conf:27ama fastcgi_ignore_headers "Expires"çalışıyor
dnozay

0

php-fpm ile:

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

php'ye bir İçerik Türü üstbilgisi göndermemesini (boş bir satır bile değil) söyler ve nginx sizin için türü tahmin eder ve üstbilgiyi ekler :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.