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.