如何确保 Nginx 将纯文本文件作为下载而不是内联提供?

dem*_*mas 18 nginx mime-type

我有适用于 Nginx 的 Rails 应用程序(Redmine)。如果我点击任何附件,我的浏览器(firefox,即 chrome)会要求我下载文件。但是如果我点击 txt 类型的附件,我的浏览器会在浏览器中打开这个文件。

据我所知,Nginx 的任务是决定 - 在浏览器中打开文件还是下载文件。我该如何设置?

dav*_*ams 21

更改Content-Type.txt文件可以正常工作,但它是解决这个问题的一个很危险的方式,因为你不能保证100%,用户的浏览器会回应你如何期望。此外,将.txt文件标记为二进制文件是一种误导。

相反,我建议使用标准方法强制浏览器下载而不是显示文件,即使用Content-Disposition值为attachment( RFC 2183,另见RFC 2616 )的标头。

例如,这个 nginxlocation块将发送这样一个包含URI.txt下文件的标头,/downloads/因此它们将被强制下载:

location ~ ^/downloads/.*\.txt$ {
  add_header Content-Disposition "attachment";
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以添加适合您的配置的其他适当匹配等。

  • 这似乎是最好的解决方案。 (3认同)

Vad*_*dim 10

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