In meinem Nginx 0.8.34-Setup verwende ich die X-Accel-Redirect-Funktion, um das Herunterladen von Dateien im Anwendungscode zu steuern, ohne dass die Anwendung den Download selbst übernimmt.
Nach viel Mühe funktioniert dies jetzt im Grunde, außer dass nginx die Datei immer mit dem text/html
Inhaltstyp zurückgibt .
Der Standardinhaltstyp ist application / octet-stream, der im http
Block angegeben ist.
Der Serverblock enthält unter anderem die Definition des Verzeichnisses, in dem die Dateien gespeichert sind:
location /files {
default_type application/octet-stream;
alias /srv/www/uploads;
internal;
}
Also habe ich den Inhaltstyp auch hier angegeben, aber nichts hat sich geändert.
Ich möchte den Inhaltstyp nicht von der Anwendung festlegen, da ich mich dann verlangsamen würde (ich müsste ihn zuerst bestimmen). Idealerweise würde nginx den richtigen Mimetyp basierend auf der Dateierweiterung zurückgeben (ich füge mime.types in den http
Block ein).
Ich persönlich nur application / octet-Stream in der Anwendung festgelegt , aber sie könnten der Lage sein zu verwenden fastcgi_ignore_headers Nginx von der Nutzung des Back-End geliefert Header zu verhindern.
quelle
Content-Type
. Nach wiki.nginx.org/HttpFcgiModule#fastcgi_ignore_headers möglichen Werte sindX-Accel-Redirect
,X-Accel-Expires
,Expires
oderCache-Control
nginx: [warn] invalid value "Content-Type" in /etc/nginx/conf.d/default.conf:27
aberfastcgi_ignore_headers "Expires"
funktioniertmit php-fpm:
weist php an, überhaupt keinen Content-Type-Header zu senden (nicht einmal einen leeren), und nginx wird den Typ für Sie erraten und den Header hinzufügen :)
quelle