Como posso ter certeza de que o Nginx serve arquivos de texto simples como um download, em vez de inline?

18

Eu tenho o aplicativo Rails (Redmine), que funciona com o Nginx. Se eu estou clicando em qualquer anexo meu navegador (firefox, ou seja, chrome) me pedem para baixar o arquivo. Mas se eu estiver clicando em anexo do tipo txt, meu navegador abrirá esse arquivo no navegador.

Pelo que entendi, é tarefa do Nginx decidir - abrir o arquivo no navegador ou baixá-lo. Como posso configurá-lo?

    
por demas 28.02.2012 / 08:29

3 respostas

10

O tipo padrão de extensão de texto é text / plain. Esse comportamento é descrito no arquivo mime.types. Use o link ou link para substituí-lo (talvez definido como application / octet-stream).

    
por 28.02.2012 / 09:45
18

Alterar os arquivos Content-Type of .txt pode funcionar, mas é uma maneira um pouco arriscada de resolver esse problema, porque você não pode garantir 100% de que o navegador do usuário responderá como você espera. E, além disso, é enganoso rotular um arquivo .txt como um arquivo binário.

Em vez disso, sugiro usar o modo padrão para forçar o download de um navegador em vez de exibir o arquivo, que é usar o cabeçalho Content-Disposition com um valor de attachment ( RFC 2616 ).

Por exemplo, esse bloco nginx location enviará esse cabeçalho com .txt arquivos sob o /downloads/ URI e, portanto, eles serão forçados a fazer o download:

location ~ ^/downloads/.*\.txt$ {
  add_header Content-Disposition "attachment";
}

Assim, você pode adicionar outras correspondências adequadas, etc., adequadas à sua configuração.

    
por 28.02.2012 / 13:05
4

Você precisa extrair o local para o arquivo para download e definir seu tipo de conteúdo como application/octet-stream .

Temos a seguinte localização em nosso serviço para material de download para download (que inclui PDFs, imagens e alguns documentos, mas tenho certeza de que também funcionará com arquivos txt):

location /promomaterial/download/ {
         add_header Content-Type application/octet-stream;
}

Todos os navegadores que experimentamos fazem o download de todos os arquivos desse local, em vez de tentar exibi-los.

    
por 28.02.2012 / 09:57