En mi configuración nginx 0.8.34, estoy usando la función X-Accel-Redirect para controlar las descargas de archivos en el código de la aplicación sin que la aplicación maneje la descarga en sí.
Después de mucho dolor, esto ahora funciona básicamente, excepto que nginx siempre devuelve el archivo con el text/html
tipo de contenido.
El tipo de contenido predeterminado es application / octet-stream, especificado en el http
bloque.
El bloque de servidor contiene, entre otras cosas, la definición del directorio donde se almacenan los archivos:
location /files {
default_type application/octet-stream;
alias /srv/www/uploads;
internal;
}
Así que especifiqué el tipo de contenido incluso aquí, pero nada ha cambiado.
No quiero establecer el tipo de contenido por la aplicación porque luego me ralentizaría (primero tendría que determinarlo). Entonces, idealmente, nginx devolvería el tipo mime correcto basado en la extensión del archivo (sí incluyo mime.types en el http
bloque).
Personalmente, solo configuré application / octet-stream en la aplicación, pero es posible que pueda usar fastcgi_ignore_headers para evitar que Nginx use el encabezado suministrado por el back-end.
fuente
Content-Type
. Según wiki.nginx.org/HttpFcgiModule#fastcgi_ignore_headers valores posibles sonX-Accel-Redirect
,X-Accel-Expires
,Expires
oCache-Control
nginx: [warn] invalid value "Content-Type" in /etc/nginx/conf.d/default.conf:27
perofastcgi_ignore_headers "Expires"
funcionacon php-fpm:
le dice a php que no envíe un encabezado Content-Type (ni siquiera uno vacío), y nginx adivinará el tipo por usted y agregará el encabezado :)
fuente