我怎样才能确保Nginx提供纯文本文件作为下载,而不是内联?

我有Rails应用程序(Redmine)与Nginx合作。 如果我点击任何附件,我的浏览器(Firefox,即铬)要求我下载文件。 但是,如果我点击txttypes的附件,我的浏览器在浏览器中打开这个文件。

据我所知,这是Nginx的任务来决定 – 在浏览器中打开文件或下载它。 我如何设置它?

txt扩展名的默认types是text / plain。 在mime.types文件中描述了此行为。 使用http://nginx.org/en/docs/http/ngx_http_core_module.html#default_type或http://nginx.org/en/docs/http/ngx_http_core_module.html#types覆盖它(可能设置为application / octet -stream)。

更改.txt文件的Content-Type可能会起作用,但解决此问题有点冒险,因为您无法保证100%用户的浏览器能够响应您的预期。 此外,将.txt文件标记为二进制文件是误导。

相反,我build议使用标准的方式来强制浏览器下载而不是显示文件,即使用Content-Disposition头和attachment值( RFC 2183 ,另请参阅RFC 2616 )。

例如,这个nginx location块将在/downloads/ URI下发送一个带有.txt文件的头文件,这样它们将被强制下载:

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

所以你可以添加其他适当的匹配等,适合你的configuration。

您需要提取可下载文件的位置,并将其内容types设置为application/octet-stream

我们在下载位置上提供可下载的promomaterial(包括pdf,图像和一些文档,但我相信它也能用于txt文件):

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

我们试过的每个浏览器都从这个位置下载所有文件,而不是试图显示它们。