Na minha instalação do nginx 0.8.34, estou usando o recurso X-Accel-Redirect para controlar downloads de arquivos no código do aplicativo, enquanto o aplicativo não gerencia o download.
Depois de muita dor, isso agora basicamente funciona, exceto que o nginx sempre retorna o arquivo com o text/html
tipo de conteúdo.
O tipo de conteúdo padrão é application / octet-stream, especificado no http
bloco.
O bloco do servidor contém, entre outras coisas, a definição do diretório em que os arquivos estão armazenados:
location /files {
default_type application/octet-stream;
alias /srv/www/uploads;
internal;
}
Então, eu especifiquei o tipo de conteúdo mesmo aqui, mas nada mudou.
Não quero definir o tipo de conteúdo pelo aplicativo, porque então eu iria me atrasar (primeiro teria que determiná-lo). Então, idealmente, o nginx retornaria o tipo de mimet correto com base na extensão do arquivo (eu incluo mime.types no http
bloco).
Pessoalmente, defino application / octet-stream no aplicativo, mas você pode usar o fastcgi_ignore_headers para impedir que o Nginx use o cabeçalho fornecido pelo backend.
fonte
Content-Type
. De acordo com wiki.nginx.org/HttpFcgiModule#fastcgi_ignore_headers possíveis valores sãoX-Accel-Redirect
,X-Accel-Expires
,Expires
ouCache-Control
nginx: [warn] invalid value "Content-Type" in /etc/nginx/conf.d/default.conf:27
, masfastcgi_ignore_headers "Expires"
funcionacom php-fpm:
diz ao php para não enviar um cabeçalho de tipo de conteúdo (nem mesmo um vazio), e o nginx adivinhará o tipo para você e adicionará o cabeçalho :)
fonte