【问题标题】:How to specify mimetype of files with no extension in NGINX config?如何在 NGINX 配置中指定没有扩展名的文件的 mimetype?
【发布时间】:2012-11-22 09:06:01
【问题描述】:

我有一台带有 nginx 的服务器。而且我有很多图片 - png 和 jpg 保存为没有扩展名的文件(如“123123123_321312”)。

当我在 html 页面中使用标签“img”时,我会在控制台中收到这些消息:

资源解释为图像,但使用 MIME 类型 application/octet-stream: "http://xxxx/images/1350808948_997628" 传输。 jquery.js:2 资源解释为图像,但使用 MIME 类型 application/octet-stream: "http://xxxx/images/1343808569_937350" 传输。

有没有办法让 nginx 添加具有请求文件的正确 mimetype 的标头?

【问题讨论】:

  • 好吧,可能 nginx 不能自动发送 mime 头取决于文件的实际内容。因此,消除这些错误的唯一方法就是如 Demikl 所说 - 始终使用 JPEG-mimeheader。

标签: nginx mime-types


【解决方案1】:

您应该使用default_type 指令:

server {
   ...
   default_type text/html;

   location /images/png {
      default_type image/png;
   }

   location /images/jpg {
      default_type image/jpeg;
   }
}

【讨论】:

  • 是的,如果文件位于不同的文件夹中,这将是解决方案。但就我而言,我将所有文件放在一个地方。
  • 似乎即使实际文件是PNG图像,指定MIME类型image/jpeg也不会生成任何警告日志。刚刚用谷歌浏览器测试过。
  • 如果其他人对此感到困惑(就像我一样),请务必在设置 default_type 并重新加载 nginx 配置后在浏览器中进行完全刷新。要么清除缓存,要么在 Chrome 中按 shift-F5,否则浏览器将得到 304 并假定原始内容类型仍然有效。
【解决方案2】:

我还要补充。

如果您的网页被下载而不是执行,Mickaël Le Baillif 解决方案也可以工作。 因为nginx认为应该是default_type application/octet-stream;虽然官方文档说:

使特定位置发出“application/octet-stream” MIME 类型为所有请求,可以使用以下配置

并指向location /download/ 这也给出了:

Resource interpreted as Image but transferred with MIME type application/octet-stream: "http://xxxxx.com/"

Nginx 版本:1.6.2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多